There are many solutions to serialize a small dictionary: json.loads
/ json.dumps
, pickle
, shelve
, ujson
,甚至通过使用 sqlite
。
但是当处理可能有 100 GB 的数据时,就不可能再使用这样的模块,因为在关闭/序列化时可能会重写整个数据。
redis
不是真正的选择,因为它使用客户端/服务器方案。
问题: 哪个键值存储、无服务器、能够处理 100+ GB 的数据,在 Python 中经常使用?
我正在寻找具有标准“Pythonic”的解决方案 d[key] = value
语法:
import mydb
d = mydb.mydb('myfile.db')
d['hello'] = 17 # able to use string or int or float as key
d[183] = [12, 14, 24] # able to store lists as values (will probably internally jsonify it?)
d.flush() # easy to flush on disk
注意: BsdDB (BerkeleyDB) 似乎已被弃用。似乎有一个 LevelDB for Python ,但它似乎并不为人所知——而且我 还没有找到 可以在 Windows 上使用的版本。哪些是最常见的?
相关问题: Use SQLite as a key:value store , Flat file NoSQL solution
原文由 Basj 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 sqlitedict ,它为 SQLite 数据库提供键值接口。
SQLite 限制页面 表示理论最大值为 140 TB,具体取决于
page_size
和max_page_count
。但是,Python 3.5.2-2ubuntu0~16.04.4 (sqlite3
2.6.0) 的默认值为page_size=1024
和max_page_count=1073741823
这提供了约 1100 GB 的最大数据库大小,可以满足您的要求。您可以像这样使用包:
更新
关于内存使用。 SQLite 不需要你的数据集来适应 RAM。默认情况下,它最多缓存
cache_size
页面,这几乎是 2MiB(与上面相同的 Python)。这是您可以用来检查您的数据的脚本。运行前:sqlitedct.py
像
./sqlitedct.py & psrecord --plot=plot.png --interval=0.1 $!
一样运行它。在我的例子中,它产生了这个图表:和数据库文件: