SQLite:ON磁盘与内存数据库

时间:2010-11-08 11:33:09

标签: memory sqlite

我们正在尝试将SQLite集成到我们的应用程序中,并尝试将其填充为缓存。我们计划将其用作内存数据库。第一次使用它。我们的应用程序是基于C ++的。

我们的应用程序与主数据库交互以获取数据并执行大量操作。这些操作通常涉及一个相当大的表。 我们在SQLite中复制了这个表,以下是观察结果:

字段数:60 记录数:1,00,000

随着数据量的增加,应用程序的内存从120MB大幅增加到大约1.4 GB。此时我们的应用程序处于空闲状态,没有进行任何主要操作。但通常情况下,一旦操作开始,内存利用率就会上升。现在使用SQLite和Memory DB这样的高内存使用量,我们认为我们不能支持这些记录。

当我在磁盘上创建数据库时,数据库大小总和为~40MB。但是应用程序的内存使用率仍然非常高。

问。是否有这种高使用率的原因。在数据库不在内存之前,所有缓冲区都已清除,如上所述?

任何帮助都将深表感谢。

谢谢和问候 萨钦

2 个答案:

答案 0 :(得分:2)

您可以使用vacuum命令通过减小sqlite数据库的大小来释放内存。

如果您正在进行大量的插入更新操作,那么db大小可能会增加。您可以使用真空命令释放空间。

答案 1 :(得分:1)

SQLite将内存用于数据本身以外的其他内容。它不仅包含数据,还包含连接,预处理语句,查询缓存,查询结果等。您可以在SQLite Memory Allocation上阅读更多信息并进行调整。确保你正确地破坏你的对象(sqlite3_finalize()等)。