[英]in-memory database in Python
我正在用 Python 對大型數據庫進行一些查詢,以從數據庫中獲取一些統計信息。 我希望這些統計信息在內存中,以便其他程序無需訪問數據庫即可使用它們。
我正在考慮如何構造它們,在嘗試設置一些復雜的嵌套字典之后,我意識到一個很好的表示方法是 SQL 表。 不過,我不想將數據存儲回持久性數據庫。 是否有支持使用 SQL 語法查詢數據的 SQL 數據庫的內存中實現?
參加聚會非常晚,但 pyfilesystem2(與我無關)似乎非常合適:
https://pyfilesystem2.readthedocs.io
pip install fs
from fs import open_fs
mem_fs = open_fs(u'mem://')
...
內存數據庫通常不支持內存分頁選項(對於整個數據庫或某些表),即數據庫的總大小應小於可用物理內存或最大共享內存大小。
根據您的應用程序、數據訪問模式、數據庫大小和數據庫的可用系統內存,您有幾個選擇:
一種。 文件系統中的腌制 Python 數據
它以pickle格式存儲結構化的Python數據結構(例如字典/列表/元組/集合列表、列表字典/pandas數據幀/numpy系列等),以便在unpickled后立即方便地使用它們。 AFAIK,Python 不會隱式地使用文件系統作為 Python 對象在內存中的后備存儲,但主機操作系統可能會將 Python 進程換成更高優先級的進程。 這適用於靜態數據,與可用系統內存相比具有較小的內存大小。 這些腌制數據可以復制到其他計算機,由同一台計算機中的多個相關或獨立進程讀取。 實際的數據庫文件或內存大小比數據大小有更高的開銷。 這是訪問數據的最快方式,因為數據在 Python 進程的同一內存中,並且沒有查詢解析步驟。
灣內存數據庫
它在內存中存儲動態或靜態數據。 與 Python API 綁定的內存庫可能有 Redis、sqlite3、Berkeley Database、rqlite 等。不同的內存數據庫提供不同的功能
C。 內存映射數據庫/數據結構
它存儲靜態或動態數據,這些數據可能大於主機操作系統的物理內存。 Python 開發人員可以使用諸如mmap.mmap()
numpy.memmap()
API 將某些文件映射到進程內存空間。 可以將文件排列成索引和數據,以便可以通過索引查找來查找/訪問數據。 這實際上是各種數據庫庫使用的機制。 Python 開發人員可以實施自定義技術來訪問/更新數據效率。
您可以使用像SQLite這樣的數據庫。 嚴格來說它不是內存,但它相當輕巧,並且與您的主數據庫完全分開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.