快速,低内存,恒定键值数据库,支持并发和随机访问读取

时间:2012-06-22 02:52:19

标签: multiprocessing key-value key-value-store multiprocess

我需要一个磁盘上的键值存储,不需要太大或分布式。用例如下:

  • 完整数据库的大小为Gbs
  • 键和值都是常量
  • 它是一个不变的数据库。一旦编写完整个数据库,我就不需要再编写任何条目(或者很少写入)
  • 将以不可预测的顺序访问密钥
  • 支持多个进程的并发读取是必须的
  • 必须非常快,因为读者将在紧密循环中访问数百万个密钥。所以它应该尽可能地与在关联数组上循环一样高效(STL's std::map说)
  • 理想情况下,它应该允许设置使用多少RAM,通常应该使用几百Mbs
  • 用C或C ++编写。现有的python扩展将是一个很大的优势,但我可以在我自己的
  • 上添加它

所以cdbgdbm看起来是不错的选择,但只是想知道是否有更合适的选择。我们将非常感谢相关基准或甚至相关轶事证据的指示。

3 个答案:

答案 0 :(得分:4)

您最终使用了什么数据库?

如果你喜欢cdb,你需要> 4 GB数据库,请查看最初基于cdb的mcdb,以及一些性能增强和添加对4 GB +常量数据库的支持。

https://github.com/gstrauss/mcdb/

提供了Python,Perl,Lua和Ruby扩展。 mcdb是用C语言编写的,并且使用了mmap,因此很容易支持线程之间和进程之间的无锁并发读取。由于它由内存映射文件支持,因此页面将根据需要从磁盘映射,即使访问数据库的进程数增加,内存也会保持不变。

答案 1 :(得分:0)

你看过bdb了吗?这听起来好像是BDB。

答案 2 :(得分:0)

我喜欢hamsterdb,因为我写了它:)

http://www.hamsterdb.com

  • 经常用于数GB的数据库大小
  • 键/值可以是您想要的任何大小
  • 随机访问+方向访问(使用游标)
  • 并发读取:hamsterdb是线程安全的,但尚未并发。我正在努力。
  • 如果您的缓存足够大,那么访问速度非常快(您可以指定缓存大小)
  • 用c ++编写
  • python扩展可用,但非常过时;将需要修复

如果您想评估hamsterdb并需要一些帮助,请随时给我发邮件。