5

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

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

所以cdbgdbm看起来不错的选择,但只是想知道是否有更合适的选择。指向相关基准甚至相关轶事证据的指针将不胜感激。

4

3 回答 3

4

你最终使用的是什么数据库?

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

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

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

于 2012-11-16T04:59:43.283 回答
0

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

http://www.hamsterdb.com

  • 经常与几 GB 的数据库大小一起使用
  • 键/值可以有任何你想要的大小
  • 随机访问 + 定向访问(带光标)
  • 并发读取:hamsterdb 是线程安全的,但还不是并发的。我正在做这个。
  • 如果您的缓存足够大,那么访问将非常快(您可以指定缓存大小)
  • 用 C++ 编写
  • python 扩展是可用的,但非常过时;需要修复

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

于 2012-06-22T14:07:01.010 回答
0

你看过bdb吗?听起来BDB很好用。

于 2012-06-22T02:58:56.823 回答