哪个键值存储最有前景/稳定?

61 投票
15 回答
21681 浏览
提问于 2025-04-15 19:59

我想开始使用键值存储来做一些小项目(主要是为了学习),但最近出现了很多这样的存储,我不知道从哪里入手。随便想想,我能想到的有:

  1. CouchDB
  2. MongoDB
  3. Riak
  4. Redis
  5. Tokyo Cabinet
  6. Berkeley DB
  7. Cassandra
  8. MemcacheDB

我相信还有更多我没找到的。网上的信息太多了,很难找到这些竞争者之间的可靠比较。我关注的标准和问题有:

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

编辑:
到目前为止,看起来Redis是最好的选择,但这只是因为我得到了一个很好的回复(来自ardsrk)。我希望能有更多像他那样的回答,因为它们给我指明了有用的、量化的信息。你使用的是哪个键值存储,为什么

编辑 2:
如果有人对CouchDB、Riak或MongoDB有经验,我很想听听你们的经历(如果你能提供几个的比较分析,那就更好了)

15 个回答

8

在今年的PyCon大会上,Reddit的Jeremy Edberg做了一个演讲:

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

他提到,Reddit使用PostGres作为一个键值存储,可能是用一个简单的两列表格来实现的;根据他的演讲,这种方式的性能比他们尝试过的其他任何键值存储都要快。而且,PostGres也非常成熟。

最终,OverClocked说得对;你的使用场景决定了最合适的存储方式。不过,关系型数据库管理系统(RDBMS)长期以来一直被(滥)用作键值存储,而且它们的速度也可以非常快。

24

你需要了解现代NoSQL的现象到底是什么。
这并不是说键值存储。其实这种存储方式已经存在几十年了,比如BerkeleyDB。那为什么现在大家这么关注呢?

这也不是关于那些花哨的文档或面向对象的结构,或者解决“阻抗不匹配”的问题。支持这些特性的专家们已经宣传了很多年,但并没有取得什么实质性的进展。

其实,它主要是解决三个技术问题:自动的(对维护人员来说)和透明的(对应用开发者来说)故障转移、分片和复制。
所以你应该忽略那些在这些方面没有真正解决问题的流行产品,比如Redis、MongoDB、CouchDB等等。要专注于真正的分布式解决方案,比如Cassandra、Riak等。

否则,你会失去SQL带给你的所有好处(比如临时查询、给老板的Crystal Reports、第三方工具和库),而且什么也得不到。

26

你推荐哪个,为什么?

我推荐Redis。为什么?继续往下看吧!!

哪个速度最快?

我不能确定哪个是最快的。不过,Redis确实很快。为什么呢?因为它把所有数据都放在内存里。最近增加了虚拟内存的功能,但所有的键值依然主要保存在内存中,只有不常用的值才会被换到硬盘上。

哪个最稳定?

同样的,由于我没有直接使用其他键值存储的经验,无法做比较。不过,很多网站应用,比如GitHubInstagram等,都在生产环境中使用Redis。

哪个最容易安装和设置?

Redis的安装相对简单。你可以去下载源代码,然后在Linux系统上运行make install。这样就会生成一个redis-server的可执行文件,你可以把它放到你的路径中并启动它。

redis-server默认绑定在6379端口。你可以查看随源代码一起提供的redis.conf文件,里面有更多的配置和设置选项。

哪个支持Python和/或Ruby?

Redis对RubyPython的支持非常好。

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

还有一个make 32bit命令,可以让所有指针在64位机器上也只占用32位的大小。这在内存少于4GB的机器上能节省不少内存。

撰写回答