我正在用 Python 对一个大型数据库进行一些查询,以从数据库中获取一些统计信息。我希望这些统计信息在内存中,以便其他程序可以使用它们而无需访问数据库。
我在考虑如何构造它们,在尝试设置一些复杂的嵌套字典后,我意识到一个好的表示方法是 SQL 表。不过,我不想将数据存储回持久数据库。是否有任何支持使用 SQL 语法查询数据的 SQL 数据库的内存实现?
我正在用 Python 对一个大型数据库进行一些查询,以从数据库中获取一些统计信息。我希望这些统计信息在内存中,以便其他程序可以使用它们而无需访问数据库。
我在考虑如何构造它们,在尝试设置一些复杂的嵌套字典后,我意识到一个好的表示方法是 SQL 表。不过,我不想将数据存储回持久数据库。是否有任何支持使用 SQL 语法查询数据的 SQL 数据库的内存实现?
内存数据库通常不支持内存分页选项(针对整个数据库或某些表),即数据库的总大小应小于可用物理内存或最大共享内存大小。
根据您的应用程序、数据访问模式、数据库大小和数据库的可用系统内存,您有几种选择:
一个。文件系统中的腌制 Python 数据
它以腌制格式存储结构化的 Python 数据结构(例如字典/列表/元组/集合列表、列表/熊猫数据帧/numpy 系列的字典等),以便在未腌制时立即方便地使用它们。AFAIK,Python 不使用文件系统作为内存中 Python 对象的后备存储,但主机操作系统可能会将 Python 进程换成更高优先级的进程。这适用于静态数据,与可用系统内存相比,内存大小更小。这些腌制数据可以复制到其他计算机,由同一台计算机中的多个相关或独立进程读取。实际的数据库文件或内存大小比数据大小具有更高的开销。这是访问数据的最快方式,因为数据在 Python 进程的同一内存中,
湾。内存数据库
它在内存中存储动态或静态数据。可能与 Python API 绑定的内存库有 Redis、sqlite3、Berkeley Database、rqlite 等。不同的内存数据库提供不同的功能
C。内存映射数据库/数据结构
它存储可能比主机操作系统的物理内存更大的静态或动态数据。Python 开发人员可以使用 API,例如mmap.mmap()
numpy.memmap()
将某些文件映射到进程内存空间。这些文件可以排列成索引和数据,以便可以通过索引查找来查找/访问数据。这其实是各种数据库库使用的机制。Python 开发人员可以实施自定义技术来访问/更新数据效率。
派对迟到了,但 pyfilesystem2 (我不隶属于它)似乎是一个完美的选择:
https://pyfilesystem2.readthedocs.io
pip install fs
from fs import open_fs
mem_fs = open_fs(u'mem://')
...
您可以使用像SQLite这样的数据库。严格来说,它不是在内存中,但它相当轻,并且与您的主数据库完全分开。