哪个关键/价值商店是最有前途的/稳定的?

我打算开始使用一些关键/价值商店(主要是作为一种学习体验),但是最近出现了很多,我不知道从哪里开始。 从内存中列出,我可以想到:

  1. CouchDB的
  2. MongoDB的
  3. 了Riak
  4. Redis的
  5. 东京内阁
  6. 伯克利DB
  7. 卡桑德拉
  8. MemcacheDB

而且我相信还有更多的东西在我的search工作中滑落了。 有了所有的信息,很难find所有竞争对手之间的可靠比较。 我的标准和问题是:

  1. (最重要)你推荐哪个, 为什么
  2. 哪一个是最快的?
  3. 哪一个是最稳定的?
  4. 哪一个是最容易设置和安装的?
  5. 哪些有绑定的Python和/或Ruby?

编辑:
到目前为止,看起来Redis是最好的解决scheme,但这只是因为我已经得到了一个坚实的回应(来自ardsrk)。 我正在寻找像他这样的更多的答案,因为他们指向了有用的量化信息。 使用哪个Key-Value商店, 为什么

编辑2:
如果有人对CouchDB,Riak或MongoDB有经验,我很乐意听到你们的经验(如果你能对其中的几个进行比较分析的话,更是如此)

你推荐哪个,为什么?

我build议Redis。 为什么? 继续阅读!!

哪一个是最快的?

我不能说这是否是最快的。 但Redis 速度很快 。 这很快,因为它将所有的数据保存在RAM中。 最近添加了虚拟内存function,但所有键仍保留在主内存中,只有很less使用的值被交换到磁盘。

哪一个是最稳定的?

再一次,因为我没有直接的经验,我无法比较的其他重要价值商店。 然而,Redis正被许多Web应用程序(如GitHub和Instagram等)使用。

哪一个是最容易设置和安装的?

Redis安装起来相当简单。 抓住源代码并在Linux上运行make install 。 这会产生redis-server二进制文件,您可以将其放在path上并启动它。

redis-server默认绑定到端口6379。 查看源代码中的redis.conf以获取更多configuration和设置选项。

哪些有绑定的Python和/或Ruby?

Redis具有出色的Ruby和Python支持。

针对下面的Xorlev的评论 :Memcached只是一个简单的键值存储。 Redis支持复杂的数据types,如列表,集合和有序集合,同时为这些数据types提供了一个简单的接口 。

甚至在64位机器上,也make 32bit使得所有的指针只有32位大小。 这样可以在RAMless于4GB的机器上节省大量的内存。

您需要了解现代NoSQL现象的含义。
这不是关键价值存储。 他们已经有几十年了(例如BerkeleyDB)。 为什么现在所有的大惊小怪?

这不是关于花哨的文档或面向对象的模式和克服“阻抗不匹配”。 这些特点的支持者多年来一直在吹捧他们,他们没有任何地方。

这只是解决3个技术问题:自动(对于维护者)和透明(对于应用程序开发者)故障转移,分片和复制。 因此,你应该忽略任何不在这一方面提供的新潮产品。 这些包括Redis,MongoDB,CouchDB等。专注于真正的分布式解决scheme,如cassandra,riak等

否则,你将失去SQL给你的所有好东西(特别查询,你的老板水晶报表,第三方工具和库),并得到任何回报。

在今年的PyCon上,Reddit的Jeremy Edberg发表了一个演讲:

http://pycon.blip.tv/file/3257303/

他说,Reddit使用PostGres作为一个关键价值商店,可能是一个简单的2列表; 根据他的演讲,他们的基准testing速度超过了他们尝试过的任何其他关键价值商店。 当然,这是非常成熟的。

最终,OverClocked是正确的; 你的用例决定了最好的商店。 但是RDMBSs早已被用作关键价值商店,而且它们也可以非常快速。

我一直在玩MongoDB,它有一件事使我的应用程序非常完美,可以直接在数据库中存储复杂的地图/列表。 我有一个大的Map,其中每个值都是一个列表,我不需要做任何特殊的事情,只需要在不知道所有不同的键和列表值的情况下编写和检索。 我不太了解其他选项,但速度和能力使Mongo成为我的应用的完美select。 另外Java驱动程序的使用非常简单。

他们都有不同的特点。 另外,不要忘记在每次发布之前,LinkedIn的实际使用/testing项目Voldemort 。

很难比较。 你必须问自己你需要什么:例如,你想分区? 如果是这样的话,其中的一些,如CouchDB,将不会支持它。 你想擦除编码? 然后他们大部分都没有。 等等。

Berkeley DB是一个非常基本的,低级别的存储引擎,或许可以免于这个讨论。 几个键值系统build立在它之上,以提供复制,版本控制,编码等附加function。

另外,你的应用程序需要什么? 其中一些解决scheme包含可能不必要的复杂性。 例如,如果只存储不会改变的静态数据,则可以将它们存储在数据的SHA-1内容哈希(即使用content-hash作为关键字)下。 在这种情况下,您不必担心新鲜度,同步,版本控制,并且可以删除大量的复杂性。

你必须做的一个区别是你将使用数据库? 不要因为时尚而跳上船。 你需要一个关键的价值商店吗? 或者你需要一个基于文档的商店? 什么是你的记忆足迹要求? 在一个小型虚拟机上运行它还是单独运行?

我build议首先列出您的要求,然后看看哪些与要求重叠。

据说,我已经使用了CouchDB / MongoDB,并且宁愿使用MongoDB,因为它易于安装和从mysql样式查询过渡到最佳状态。 因为dynamic模式(没有迁移文件!)和更好的数据build模(数组,散列),我select了mongodb over sql。 我没有根据可扩展性进行评估。

MongoMapper是Ruby的一个很好的MongoDB orm映射器,已经有了一个工作的Rails 3 fork。

我列出了一些关于为什么我喜欢mongodb在我的scribd幻灯片中的更多细节http://tommy.chheng.com/index.php/2010/02/mongodb-for-natural-development/

我注意到每个人如何将memcached与memcachedb混淆。 他们是两个不同的系统。 操作询问了关于memcachedb。

memcached是内存存储。 memcachedb使用Berkeley DB作为其数据存储。

我只有Berkeley DB的经验,所以我会提到我喜欢的东西。

  • 它很快
  • 这是非常成熟和稳定
  • 它有出色的文档
  • 它具有开箱即用的C,C ++,Java和C#绑定。 其他语言绑定可用。 我相信Python是作为“电池”的一部分绑定的。

我遇到的唯一缺点是C#绑定是新的,似乎并不支持每个function。

还有zodb。

哪个关键价值商店最有前途/稳定?

G-WAN KV商店看起来颇有前途

 DB engine Traversal ----------- ---------------------------- SQLite 0.261 ms (b-tree) Tokyo-Cabinet (TC) 4.188 ms (hash table) TC-FIXED 0.103 ms (fixed-size array) G-WAN KV 0.010 ms (unamed) 

此外,G-WANnetworking服务器在内部使用它,以其高并发性能(这是稳定性问题)而闻名。

我真的很喜欢memcached

我在几个我的网站上使用它,它很简单,快速,简单。 这真的非常简单易用,这个API很容易使用。 它不会在磁盘上存储任何东西,所以名称为memcached,所以如果你正在寻找一个持久化的存储引擎,那就不行了。

Python有python-memcached

我没有使用过Ruby客户端,但Googlesearch很快显示出了RMemCache

如果你只需要一个caching引擎,memcached是要走的路。 它的发展,它是稳定的,它stream血快速。 LiveJournal制作它和Facebook开发它是有原因的。 它在一些最大的网站使用效果很好。 它的尺度非常好。

卡桑德拉似乎很受欢迎。

Cassandra在Digg,Facebook,Twitter,Reddit,Rackspace,Cloudkick,思科,SimpleGeo,Ooyala,OpenX以及更多拥有大型活动数据集的公司中使用。 最大的生产集群在超过150台机器上拥有超过100TB的数据。

只是为了完成清单:还有Dreamcache。 它与Memcached兼容(在协议方面,所以你可以使用为Memcached编写的任何客户端库),它只是更快。

正如其他人所说,这总是取决于你的需求。 例如,我比较喜欢适合我的应用程序。

我首先使用memcached来快速读/写访问。 作为Java API我已经使用SpyMemcached,有一个非常简单的界面,你可以使用写入和读取数据。 由于内存泄漏(没有更多的内存),我被要求寻找另一个解决scheme,我也没有能够扩展权利,只是增加一个进程的内存似乎不是一个好成绩。

经过一番审查,我看到了couchbase,它带有复制,集群,自动故障转移和社区版(MS Windows,MacOs,Linux)。 对我来说最好的事情是,它的Java客户端也实现了SpyMemcached,所以在设置服务器时使用couchbase而不是memcached作为数据存储区时,几乎没有别的事情要做。 优点? 当然,我的数据现在是持久性,复制和索引。 它带有一个webconsole来为erlang中的文档视图编写map reduce函数。

它支持Python,Ruby,.Net等,通过webconsole和客户端工具轻松configuration。 它运行稳定。 通过一些testing,我能够写出大约每秒10k的长度为200-400字节的logging。 阅读performance虽然(本地testing)的方式更高。 做出决定有很多乐趣。

只有mongoDB,memchache和redis的经验。 这是他们和couchDB的比较 。

似乎mongoDB是最受欢迎的。 它支持分片和复制,最终一致,在ruby(mongoid)中有很好的支持。 它也有比其他两个更丰富的function集。 所有的mongo,redis和memchache都可以将key-value存储在内存中,但redis似乎要快得多,根据这篇文章 ,redis是2x写的,比mongo快了3倍。 它有更好的devise数据结构和更“轻量级”。

我会说他们有不同的用法,mongoDB可能适合大数据集和文档存储,而memchache和redis更适合存储caching或日志。