【问题标题】:SQLite: ON disk Vs Memory DatabaseSQLite:磁盘与内存数据库
【发布时间】:2010-11-08 11:33:08
【问题描述】:

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

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

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

随着数据填充的开始,应用程序的内存从 120MB 急剧上升到约 1.4GB。此时我们的应用程序处于空闲状态,没有进行任何重大操作。但通常,一旦操作开始,内存利用率就会上升。现在有了内存数据库中的 SQLite 和如此高的内存使用率,我们认为我们将无法支持这么多记录。

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

问。这种高使用率是否有原因。所有缓冲区都已被清除,如前所述,DB 不在内存中?

任何帮助将不胜感激。

感谢和问候 萨钦

【问题讨论】:

  • 60 个字段听起来像一个电子表格。查看您的数据,看看规范化是否可以为您节省大量空间。
  • 听起来你有内存泄漏
  • 您怀疑泄漏在哪里?在 SQLite 或我们的应用程序中?在我的应用程序中,结构和缓冲区正在正确清理。

标签: memory sqlite


【解决方案1】:

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

如果您正在执行大量插入更新操作,则数据库大小可能会增加。您可以使用 vaccum 命令来释放空间。

【讨论】:

    【解决方案2】:

    SQLite 将内存用于数据本身以外的事物。它不仅包含数据,还包含连接、准备好的语句、查询缓存、查询结果等。您可以在SQLite Memory Allocation 上阅读更多内容并对其进行调整。确保您也正确地销毁了您的对象(sqlite3_finalize() 等)。

    【讨论】:

    • 谢谢。我想我会详细看看这个然后回复你。
    猜你喜欢
    • 2015-05-21
    • 2014-11-06
    • 2010-11-29
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多