将现有的 SQLite 数据库加载到内存

Load existing SQLite database to memory

我在文件中有一个现有的数据库。我想在内存中加载数据库;因为我正在做很多查询并且数据库不是很大(<50MB)来加快这些查询。有什么办法吗?

您可以创建一个 RAM drive 并让数据库使用这些文件而不是您的 HDD/SSD 托管文件。如果您有疯狂的性能要求,您也可以选择内存数据库。

在你为任何内存解决方案做之前:什么是 "a lot of queries" 每个查询的预期响应时间是多少?很有可能数据库程序不是性能瓶颈,而是应用程序代码缓慢或查询效率低下/缺少索引/...。

我觉得SQLite不支持并发访问数据库,会浪费很多性能。如果写操作很少发生,您可以通过保留数据库的副本并让不同的线程读取不同的 SQLite 实例来提高性能(从未尝试过)。

50 MB 很容易放入 OS 文件缓存;你不需要做任何事情。

如果文件锁定导致明显的开销(不太可能),请考虑使用 exclusive locking mode

由于文件系统开销这一简单事实(无论数据是否缓存 and/or RAM 驱动器;这些措施会有所帮助,但您无法完全摆脱文件系统的影响。

SQLite 允许多个并发读取器,但任何写入事务都会阻塞读取器,直到完成。

SQLite 只允许单个进程使用内存数据库,尽管该进程可以有多个线程。

您不能将持久性 SQLite 数据库加载(打开)为内存数据库(至少,我上次调查它时是这样)。您必须创建第二个内存数据库并从持久数据库中读取以加载内存数据库。但如果数据库只有 50 MB,那应该不是问题。有第 3 方工具可以让您保存内存中的 SQLite 数据库并随后重新加载它。