目前在网上关于NoSQL的讨论依旧火热,不同的观点往往能够碰撞出激情的火花。前不久一条关于MongoDB的帖子让10gen的老大都亲自站出来澄清事实,虽然最终证实该帖子是一个恶作剧,但是网上围绕MongoDB的争论却逐渐多了起来。最近看到一篇关于MongoDB与Riak 的对比文章,比之前的文章写得更具建设性,没有太多的技术细节。作者是来自Basho(Riak的公司)的Sean Cribbs。我想这样的文章对于NoSQL技术爱好者来说也应该值得一看,文章节选如下:

  许多人习惯将MongoDB和Riak作为竞争对手。但在现实中,两款产品却没有什么共同之处。那么为什么要将它们俩放在一起讨论呢?我个人觉得这是因为MongoDB和Riak的目标用户群是一样的,都是Web应用开发人员。所以我们在这里来看一下这两款产品究竟有那些不同,一方面让大家更加了解相关的技术,另一方面也希望能够缓和目前关于MongoDB和Riak的争论。

  如果有人问我为什么要使用MongoDB的话,我认为主要有两点:

  ①MongoDB很快。尽管用户对于持久性以及全局写锁颇有微词,这是设计的原因无法解决。但是MongoDB的读写延迟都是非常低的,为什么?因为它们大部分是在内存中完成(通过mmap)。

  ②MongoDB的开发者API非常友好。我认为这是最大的优势。尽管在投入到生产环境中之前,开发者还要考虑很多,但是他们喜欢轻结构的文档。

  相反地,Riak的长处可能对于运维人员来说更具吸引力,或者有相关经验的开发人员:

  ①Riak在核心进行分布和复制,没有特别的节点或者服务运行进行横向扩展,启动并连接的每一个节点在整个集群中所起的作用都是一样的。

  ②在面对故障情况下,Riak更专注于可用性和持久性。它为了保证写负载的可用性,甚至会牺牲raw speed和一致性,确保你的数据写道硬盘中。

  这些差别是MongoDB和Riak的设计所决定的。因为MongoDB的设计专注于提供一个单一系统数据库,而其他元素势必会复杂一些,比如sharding和replica sets等。而Riak的设计则专注于分布式容错以及可靠性,它势必会牺牲掉原始单系统的性能。当然,这也并不是说MongoDB不能够很好地scale out 到大型集群,或者Riak在生产环境中的性能很差。Riak就是针对特殊的应用来进行设计,如果这些牺牲在能够接受的范围之内,那么Riak也是非常不错的选择。