存在可靠且高效的 Linux K/V 数据库 ?

问题描述

我需要一个快速,可靠且占内存少的 Linux K/V 数据库。Key 长大约为 128 bytes,value 最长 128K 或 256K 。理想中的数据库内存占用不应该大于1MB。数据库大约有 20G ,但是每次只有随机小部分读取。或者,我可以从数据库中移出部分二进制数据,从而将数据库尺寸降到 2G。数据库在系统挂掉时不能丢数据。可能是百倍读写比(读100,写1)。如果能够使用块存储而不是文件系统就更好了。不需要客户端服务端,仅仅只需要一个类库。最好有 Python 接口。

我考虑过哪些方案呢?

Tokyo CabinetPython 接口选择pytc,参见pytc 示例代码,支持哈希和 B+trees,事务,桶尺寸大小在创建时固定;独占写锁(写需要关闭,才能让其他用户操作);大量小数据写会多次重新打开文件导致很慢;Tyrant 服务可以帮助大量小数据写;Tokyo Cabinet, Tokyo Tyrant 和 BDB 性能评测VSDB即便在 NFS 也很安全,无锁;栅栏呢?;更新很慢,但不像 cdb 般的慢;最后一个版本为2003BerkeleyDB提供灾难恢复;事务;bsddbPython 模块Samba’s TDB提供事务支持和Python接口,用户很有经验,有时mmap()整个文件,repack操作有时会使文件翻倍,有些操作会在数据库文件大于2G(甚至是在 64位操作系统)之后莫名其妙失败,有集群实现(CTDB)。大量修改后,文件增长很大;出现大量hash竞争时会导致速度下降严重;没有内建方法重建数据文件;每个单独的hash桶拥有一个锁,并行处理很快aodbm日志式追加数据处理,防止系统挂掉;提供Python类库hamsterdb提供Python类库C-tree成熟,功能丰富的高性能商业解决方案,提供一个免费的简化版本TDBbitcask日志式结构,Erlang实现其他 DBM 实现(诸如 GDBM,NDBM,QDBM,Perl‘s SDBM or Ruby’s;他们可能没有灾难恢复)

我不会使用这些:

MemcacheDB客户端、服务端,使用 BerkeleyDB 作为后端cdb每次写都需要重新生成整个数据库apbcdb同上Redis将整个数据库放到内存中SQLite如果没有周期性压缩将会变得非常慢,比如 Firefox 3.0 的自动完成功能。即便在 SQLite 3.1 版本之后拥有auto_vacumming(同样需要周期性整理)。小数据写事务非常慢;一个繁忙的进程执行很多事务,其他进程将拿不到锁MongoDB过于重量级,用内部结构对待值Firebird基于SQL RDBMS,过于重量级

参考链接:

Linux 杂志关于 K/V 数据库的文章一些老软件列表MemcacheDB,Redis和Tokyo Cabinet Tyrant 速度比较Windows 平台上的 K/V 数据库 ?有商业应用的开源云K/V存储 ?Noah 回答

我幸运的采用 Tokyo Cabinet/pytc 方案。它的读和写都很快(在我的实现中,甚至比shelve模块,anydbm模块还快)。对于我来说,他的Python接口文档有些简陋,还好有充足的示例代码,让你知道如何解决问题。此外 Tokyo Cabinet 易于安装,不需要服务端,持续提供支持。你可以通过只读模式打开文件,以提供并发访问,或者读、写模式以阻止其他进程访问。

整个夏天我看到了很多观点,建议我尝试最适合自己的方法。如果你能在这里找到属于你的最好方法那就再好不过了,但是每个人都在寻找不同的特性,这会导致完全不一样的结局,选择你最熟悉的。

原文:http://stackoverflow.com/questions/1690605/reliable-and-efficient-key-value-database-for-linux

# 来源:HX


在微博上关注: 新浪, 腾讯 投稿

最新招聘

[上海] Python开发工程师 – 上海魅格计算机科技有限公司 [上海] Python web 工程师 – 资识署投资咨询(上海)有限公司 [深圳] 腾讯游戏(也许是深圳最大的Python团队) 诚邀Python攻城师 – 腾讯 [南京] django 开发工程师 – 南京购物党 [南京] django 开发工程师 – 南京购物党

更多>>

她是应该难过的往回走,还是蹲下来哭泣?

存在可靠且高效的 Linux K/V 数据库 ?

相关文章:

你感兴趣的文章:

标签云: