支持大文件系统的纯Python持久键值容器(类似哈希接口)?

3 投票
3 回答
1501 浏览
提问于 2025-04-15 14:56

我在寻找一个(可能是纯Python写的)持久化哈希表库(比如btree或b+tree),希望它能提供以下功能:

  1. 支持大文件(可能达到TB级别)
  2. 速度快且占用内存少(希望在速度和内存之间找到一个合适的平衡)
  3. 管理成本低
  4. 可靠性高,也就是说,一旦通过文件系统写入内容,就不会损坏文件
  5. 最后,希望是纯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,就可以了。

撰写回答