哪个键值存储最有前景/稳定?
我想开始使用键值存储来做一些小项目(主要是为了学习),但最近出现了很多这样的存储,我不知道从哪里入手。随便想想,我能想到的有:
- CouchDB
- MongoDB
- Riak
- Redis
- Tokyo Cabinet
- Berkeley DB
- Cassandra
- MemcacheDB
我相信还有更多我没找到的。网上的信息太多了,很难找到这些竞争者之间的可靠比较。我关注的标准和问题有:
- (最重要)你推荐哪个,为什么?
- 哪个是最快的?
- 哪个是最稳定的?
- 哪个最容易设置和安装?
- 哪些支持Python和/或Ruby?
编辑:
到目前为止,看起来Redis是最好的选择,但这只是因为我得到了一个很好的回复(来自ardsrk)。我希望能有更多像他那样的回答,因为它们给我指明了有用的、量化的信息。你使用的是哪个键值存储,为什么?
编辑 2:
如果有人对CouchDB、Riak或MongoDB有经验,我很想听听你们的经历(如果你能提供几个的比较分析,那就更好了)
15 个回答
在今年的PyCon大会上,Reddit的Jeremy Edberg做了一个演讲:
http://pycon.blip.tv/file/3257303/
他提到,Reddit使用PostGres作为一个键值存储,可能是用一个简单的两列表格来实现的;根据他的演讲,这种方式的性能比他们尝试过的其他任何键值存储都要快。而且,PostGres也非常成熟。
最终,OverClocked说得对;你的使用场景决定了最合适的存储方式。不过,关系型数据库管理系统(RDBMS)长期以来一直被(滥)用作键值存储,而且它们的速度也可以非常快。
你需要了解现代NoSQL的现象到底是什么。
这并不是说键值存储。其实这种存储方式已经存在几十年了,比如BerkeleyDB。那为什么现在大家这么关注呢?
这也不是关于那些花哨的文档或面向对象的结构,或者解决“阻抗不匹配”的问题。支持这些特性的专家们已经宣传了很多年,但并没有取得什么实质性的进展。
其实,它主要是解决三个技术问题:自动的(对维护人员来说)和透明的(对应用开发者来说)故障转移、分片和复制。
所以你应该忽略那些在这些方面没有真正解决问题的流行产品,比如Redis、MongoDB、CouchDB等等。要专注于真正的分布式解决方案,比如Cassandra、Riak等。
否则,你会失去SQL带给你的所有好处(比如临时查询、给老板的Crystal Reports、第三方工具和库),而且什么也得不到。
你推荐哪个,为什么?
我推荐Redis。为什么?继续往下看吧!!
哪个速度最快?
我不能确定哪个是最快的。不过,Redis确实很快。为什么呢?因为它把所有数据都放在内存里。最近增加了虚拟内存的功能,但所有的键值依然主要保存在内存中,只有不常用的值才会被换到硬盘上。
哪个最稳定?
同样的,由于我没有直接使用其他键值存储的经验,无法做比较。不过,很多网站应用,比如GitHub和Instagram等,都在生产环境中使用Redis。
哪个最容易安装和设置?
Redis的安装相对简单。你可以去下载源代码,然后在Linux系统上运行make install
。这样就会生成一个redis-server
的可执行文件,你可以把它放到你的路径中并启动它。
redis-server
默认绑定在6379端口。你可以查看随源代码一起提供的redis.conf
文件,里面有更多的配置和设置选项。
哪个支持Python和/或Ruby?
针对下面Xorlev的评论:Memcached只是一个简单的键值存储。而Redis支持复杂的数据类型,比如列表、集合和有序集合,同时也提供了一个简单的接口来操作这些数据类型。
还有一个make 32bit
命令,可以让所有指针在64位机器上也只占用32位的大小。这在内存少于4GB的机器上能节省不少内存。