支持大文件系统的纯Python持久键值容器(类似哈希接口)?
我在寻找一个(可能是纯Python写的)持久化哈希表库(比如btree或b+tree),希望它能提供以下功能:
- 支持大文件(可能达到TB级别)
- 速度快且占用内存少(希望在速度和内存之间找到一个合适的平衡)
- 管理成本低
- 可靠性高,也就是说,一旦通过文件系统写入内容,就不会损坏文件
- 最后,希望是纯Python实现。如果有C语言库也可以,但我希望它能跨平台使用
我已经看过一些解决方案,比如redis、shelve和东京柜(Tokyo Cabinet)。东京柜给我留下了深刻的印象,并且正在开发Python绑定,地址在http://code.google.com/p/python-tokyocabinet/,不过它的Windows版本还在进行中。
感谢大家的好建议。我目前正在用Python探索SQLite3。有人建议我使用数据库引擎,但我更倾向于简单高效的持久化b+tree实现。
3 个回答
2
ZODB
http://pypi.python.org/pypi/ZODB3
就像Lennart说的,当然要使用最新版本。
2
使用关系型数据库。
- 当你根据某个关键字来获取数据时,如果在这个关键字上加了索引,速度会非常快。
- 扩展性很好,能够适应不断增长的数据量。
- 不容易出现损坏。
- 已经有现成的工具可以用来做:
- 备份数据
- 数据复制
- 集群管理
- 可以在不同的平台上使用。
- 可以通过网络进行操作。
- 支持非常快速的
JOIN
操作、分组、聚合以及其他复杂查询,如果你需要的话。
你可以很容易地创建一个像 dict
或哈希表一样的类,但它的存储是用数据库来实现的。你还可以根据需要在内存中缓存尽可能多的数据。
1
ZODB确实是个很强大的工具,但可能用得有点过了。
其实你可以用几行Python代码自己搞定一个简单的解决方案:只需像字典一样创建一个对象,作为数据库的适配器。可以试试这个代码片段,把里面的SQLite调用换成MySql,就可以了。