SQLite能否将10M数据加载到内存中?

21
如果可能的话,如何做到?
我想要加快在sqlite中读取(而不是写入)的速度。
谢谢。

我不确定是否理解了问题。您是想在内存中使用sqlite数据库,还是要将最多10MB的信息读入内存?您正在使用哪种语言绑定? - Carlos Tasada
我在pysqlite中有10M的数据,我想将其加载到内存中。 - zjm1126
2个回答

27

可以的。

SQLite 将数据加载到内存中的页面中。默认页面大小为1024字节。您可以使用此命令更改页面大小。

PRAGMA page_size = bytes;

但您必须在创建数据库之前执行此操作(或者在3.5.8中,您可以通过发出新的页面大小pragma后运行VACUUM来更改它)。

缓存基于页面数。默认缓存大小为2000页。您可以使用此命令更改它。

PRAGMA cache_size = Number-of-pages;

想要在内存中存储10MB的数据,可以将页面大小增加到5120或者将缓存大小增加到10000。

有关pragma更多信息,请参见此处


9
如果你不知道自己在做什么,就不要改变页面大小;如果你试图影响缓存,这是一个错误的操作,将其设置为5120可能会导致严重的性能后果。此外,在许多情况下,你希望预先缓存所有内容,因为通过正常访问无序读取文件懒惰地填充缓存可能非常慢。 - Glenn Maynard
6
通常当讨论SQLite性能时,建议首先调整页面大小。默认值1024用于向后兼容,并在SQLite使用的许多平台之间取得平衡。在具有非常有限内存的嵌入式操作系统上,页面大小应该比大部分用于数据库驱动应用程序的服务器操作系统要低。我们在Windows上测试我们的应用程序时发现,对我们来说最好的页面大小是4096字节。 - Samuel Neff
6
这是关于I/O性能而非“如何增加缓存大小”的问题。将其设置为非2的幂,如5120,几乎肯定是一个非常糟糕的想法。 - Glenn Maynard
10
或许在旧版本中可以,但在当前版本中必须是2的幂次方,否则它不会设置页面大小。详见http://www.sqlite.org/pragma.html#pragma_page_size - Stormenet

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接