我在Python中对大型数据库进行一些查询,以从数据库中获取一些统计信息。我希望这些统计信息可以存储在内存中,使得其他程序可以使用它们而无需访问数据库。
我考虑如何对它们进行结构化,在尝试设置一些复杂的嵌套字典之后,我意识到一个很好的表示方式是一个SQL表格。然而,我不想将数据存储回持久性数据库中。是否有支持使用SQL语法查询数据的内存实现的SQL数据库?
我在Python中对大型数据库进行一些查询,以从数据库中获取一些统计信息。我希望这些统计信息可以存储在内存中,使得其他程序可以使用它们而无需访问数据库。
我考虑如何对它们进行结构化,在尝试设置一些复杂的嵌套字典之后,我意识到一个很好的表示方式是一个SQL表格。然而,我不想将数据存储回持久性数据库中。是否有支持使用SQL语法查询数据的内存实现的SQL数据库?
内存数据库通常不支持内存分页选项(整个数据库或某些表),即数据库的总大小应小于可用物理内存或最大共享内存大小。
根据您的应用程序、数据访问模式、数据库大小和可用系统内存,您有几个选择:
a. 文件系统中的Pickled Python数据
它以pickled格式存储结构化的Python数据结构(例如字典/列表/元组/集合列表、列表/ pandas数据框架/ numpy系列的字典等),以便在反pickle后可以立即方便地使用。据我所知,Python不会隐式地将文件系统用作Python对象在内存中的后备存储,但主机操作系统可能会将Python进程与更高优先级的进程交换出来。这适用于静态数据,其内存大小比可用系统内存小。这些pickled数据可以复制到其他计算机上,在同一台计算机上由多个相关或独立进程读取。实际数据库文件或内存大小的开销比数据的大小更高。这是访问数据的最快方式,因为数据位于Python进程的相同内存中,无需查询解析步骤。
mmap.mmap()
、numpy.memmap()
将某些文件映射到进程内存空间中。这些文件可以按索引和数据排列,以便通过索引查找访问数据。这实际上是各种数据库库使用的机制。Python开发人员可以实现自定义技术来有效地访问/更新数据。https://pyfilesystem2.readthedocs.io
pip install fs
from fs import open_fs
mem_fs = open_fs(u'mem://')
...
你可以考虑使用像SQLite这样的数据库。它虽然不是严格意义上的内存数据库,但非常轻量级,并且完全独立于你的主数据库。