6

我想利用在内存中保存 SQLite 数据库(通过 SQLAlchemy)的速度优势,同时我经历了插入内容的一次性过程,然后将其转储到文件中,存储以备后用。

考虑一个以通常方式创建的沼泽标准数据库:

# in-memory database
e = create_engine('sqlite://')

除了创建一个全新的数据库并手动插入每个条目之外,有没有更快的方法将其内容移动到光盘上?

编辑:

对于我是否会看到使用内存数据库的任何好处存在一些疑问。不幸的是,我已经看到了大约 120 倍的巨大时差。

这种混乱可能是由于我错过了问题中的一些重要细节。也可能是由于我对以下内容缺乏了解:缓存/页面大小/等。请允许我详细说明:

我正在运行我设置的系统的模拟,每个模拟都经过以下阶段:

  1. 对数据库进行一些查询。
  2. 根据这些查询的结果进行计算/运行模拟。
  3. insert基于最新模拟的数据库中的新条目。
  4. 通过运行 确保数据库是最新的,包含新条目commit()

虽然我在每次模拟运行中只进行了十几次插入,但我确实运行了数百万次模拟,并且每次模拟的结果都需要可供未来的模拟使用。正如我所说,在运行文件支持的数据库时,这个读写过程需要相当长的时间这是6小时和一个月之间的差异。

希望这可以澄清事情。如有必要,我可以拼凑一个简单的 python 脚本来进一步概述我的过程。

4

1 回答 1

2

SQLAlchemy 和 SQLite 知道如何缓存和批量插入。

在这里使用内存中的 SQLite 数据库没有任何好处,因为该数据库使用页面就像磁盘版本一样,唯一的区别是最终这些页面被写入磁盘以用于基于磁盘的数据库。性能上的差异只有 1.5 倍,请参阅SQLite 性能基准测试——为什么 :memory: 这么慢...只有磁盘速度的 1.5 倍?

以后也无法将内存数据库移动到基于磁盘的数据库,除非在内存数据库上运行查询并在两个单独的连接上执行批量插入到基于磁盘的数据库中。

于 2013-04-05T13:46:11.467 回答