可靠,高效的Linux键值数据库?

问题:

我需要一个快速,可靠和高效的Linux内核键值数据库。我的密钥大约是128个字节,最大值可以是128K或256K。数据库子系统不应该使用大于1 MB的RAM。总数据库大小为20G(!),但是一次只访问一小部分数据。如有必要,我可以将一些数据blob从数据库中移出(到普通文件),所以大小最多可以降低到2 GB。数据库必须在最近未修改的数据中没有任何损失的情况下经受系统崩溃。我将有大约100倍以上的读取比写入。如果可以使用块设备(没有文件系统)作为存储,则是一个优点。我不需要客户端 – 服务器功能,只需要一个库。我需要Python绑定(但是如果它们不可用,我可以实现它们)。
我应该考虑哪些解决方案,你推荐哪一个?
我知道哪些人可以工作的候选人:

  •  Tokyo Cabinet(Python绑定为pytc,另请参阅pytc example code,支持散列和B +树,事务日志文件等等,在创建数据库时,存储区数组的大小是固定的;写入程序必须关闭文件给别人一个机会;许多小文字重新打开文件,每个都很慢; Tyrant服务器可以帮助大量的小写操作; speed comparison between Tokyo Cabinet, Tokyo Tyrant and Berkeley DB
  •  VSDB(即使在NFS上也是安全的,没有锁定;那么障碍是什么?;更新非常慢,但不像在cdb中那么慢; 2003年的最后一个版本)
  •  BerkeleyDB(提供崩溃恢复;提供事务; bsddb Python模块提供绑定)
  •  Samba’s TDB(使用事务和Python绑定,一些用户experienced corruption,有时mmap()是整个文件,repack操作有时使文件大小加倍,如果数据库大于2G,则会产生神秘故障(4))也可用;集群实现(CTDB)也可用;经过大量修改后文件变得太大;在大量哈希争用之后文件变得太慢;没有内置方式来重建文件;通过锁定非常快速的并行更新个人散列桶)
  •  aodbm(追加 – 只有这样才能在系统崩溃时保留下来,使用Python绑定)
  •  hamsterdb(使用Python绑定)
  •  C-tree(高性能的成熟,多功能的商业解决方案,具有减少功能的免费版本)
  • 旧的TDB(从2001年起)
  •  bitcask(日志结构化,用Erlang编写)
  • 各种其他DBM实现(如GDBM,NDBM,QDBM,Perl的SDBM或Ruby的;可能他们没有适当的崩溃恢复)

我不会使用这些:

  •  MemcacheDB(客户端服务器,使用BereleleyDB作为后端)
  •  cdb(每次写入都需要重新生成整个数据库)
  •  http://www.wildsparx.com/apbcdb/(同上)
  •  Redis(将整个数据库保存在内存中)
  •  SQLite(如果没有定期抽真空,速度会变得很慢,尽管3.1版本和更高版本的sqlite允许auto_vacuum ing,请参阅Firefox 3.0中的位置栏中的自动完成;小心:小写入事务可能非常慢;注意:如果一个繁忙的进程正在进行多项交易,其他进程就会挨饿,而且他们永远无法获得这个锁)
  •  MongoDB(太重,将值视为具有内部结构的对象)
  •  Firebird(基于SQL的RDBMS,过重)

仅供参考,Linux杂志中的recent article about key–value databases
仅供参考,older software list
仅供参考,speed comparison of MemcacheDB, Redis and Tokyo Cabinet Tyrant
有关StackOverflow的相关问题:

回答:

我已经与东京Cabinet / pytc解决方案运气不错。它的速度非常快(比在我的实现中使用anydbm的shelve模块要快一些),无论是阅读还是书写(尽管我也做了更多的阅读)。对我来说,问题是python绑定的简单文档,但是有足够的示例代码来弄清楚如何做你需要做的事情。此外,东京内阁是很容易安装(如同python绑定),不需要服务器(如你所说)and seems to be actively supported(稳定,但不再处于积极的发展)。您可以以只读模式打开文件,允许并发访问或读/写模式,防止其他进程访问数据库。
我在夏天正在寻找各种各样的选择,我得到的建议是这样的:尝试不同的选择,看看什么最适合你。如果只有一个“最好的”选项,那会很好,但是每个人都在寻找稍微不同的特征,并且愿意做出不同的折衷。你最了解。
(也就是说,如果你分享了最适合你的东西,为什么你选择了这个解决方案而不是别人呢!

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Reliable and efficient key–value database for Linux?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 4 = 3