我被卡在这两个NoSQL数据库之间。

在我的项目中,我将在数据库中创建一个数据库。例如,我需要一个创建动态表的解决方案。

因此用户可以创建包含列和行的表。我认为MongoDB或CouchDB都可以,但我不确定哪一个。我还需要高效的分页。


当前回答

所有这些答案都把故事复杂化了。

如果您计划使用移动组件,或者需要桌面用户离线工作,然后将他们的工作同步到服务器,那么您就需要CouchDB。 如果你的代码只在服务器上运行,那么就使用MongoDB

就是这样。除非你需要CouchDB复制到移动和桌面设备的能力,否则MongoDB目前在性能、社区和工具方面都有优势。

其他回答

自己问这个问题?你将决定你的DB选择。

Do you need master-master? Then CouchDB. Mainly CouchDB supports master-master replication which anticipates nodes being disconnected for long periods of time. MongoDB would not do well in that environment. Do you need MAXIMUM R/W throughput? Then MongoDB Do you need ultimate single-server durability because you are only going to have a single DB server? Then CouchDB. Are you storing a MASSIVE data set that needs sharding while maintaining insane throughput? Then MongoDB. Do you need strong consistency of data? Then MongoDB. Do you need high availability of database? Then CouchDB. Are you hoping multi databases and multi tables/ collections? Then MongoDB You have a mobile app offline users and want to sync their activity data to a server? Then you need CouchDB. Do you need large variety of querying engine? Then MongoDB Do you need large community to be using DB? Then MongoDB

我相信你可以用Mongo(更熟悉它),你也可以用沙发。

两者都是面向文档的(基于json),因此在文档中没有“列”,而是字段——但它们可以是完全动态的。

它们都能做到,你可能需要考虑其他可以使用的因素:你关心的其他功能,受欢迎程度等等。谷歌的见解和indeed.com的招聘信息是衡量受欢迎程度的方法。

你可以试试,我想你应该能在5分钟内让mongo运行起来。

C, A和P(一致性,可用性和分区容忍度),哪两个对你更重要?快速参考,NoSQL系统的视觉指南

MongodB:一致性和分区容忍 CouchDB:可用性和分区容忍

一篇博客文章,Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j比较了每个NoSQL数据库的“最佳使用”场景。引用链接,

MongoDB:如果你需要动态查询。如果您更喜欢定义索引,而不是映射/减少函数。如果您需要在大DB上有良好的性能。如果您想要CouchDB,但数据更改太多,会填满磁盘。 CouchDB:用于积累偶尔更改的数据,并在这些数据上运行预定义的查询。版本控制很重要的地方。

Riyad Kalla最近(2012年2月)进行了一项更全面的比较,

MongoDB:主从复制 CouchDB:主-主复制

一个尝试过这两种方法的人的博客(2011年10月)评论说,CouchDB的分页功能并没有那么有用。

Kristina Chodorow (MongoDB背后团队的一部分)编写的日期为2009年6月的基准测试,

我会选择MongoDB。

注意MongoDB中稀疏唯一索引的一个问题。我已经击中它,它是非常麻烦的工作。

问题是这样的——你有一个字段,它是唯一的,如果存在,你希望找到所有的对象,该字段不存在。在Mongo中实现稀疏唯一索引的方式是,缺少该字段的对象根本不在索引中-它们不能通过对该字段的查询检索- {$exists: false}不起作用。

我提出的唯一解决办法是有一个特殊的null值族,其中一个空值被转换为连接到uuid的特殊前缀(如null:)。这是一个真正令人头痛的问题,因为在写入/查询/读取时,必须注意从空值转换到空值。一个大麻烦。

我从未在MongoDB中使用过服务器端javascript执行(无论如何都不建议),当只有一个MongoDB节点时,他们的map/reduce性能非常糟糕。由于所有这些原因,我现在正在考虑使用CouchDB,也许它更适合我的特定场景。

顺便说一句,如果有人知道描述稀疏唯一索引问题的Mongo问题的链接-请分享。

我总结了在那篇文章中找到的答案:

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-advantages-and-disadvantages-of-each

MongoDB:更好的查询,数据存储在BSON(更快的访问),更好的数据一致性,多个集合

CouchDB:更好的复制,主到主复制和冲突解决,JSON格式的数据存储(人类可读,通过REST服务更好的访问),通过map-reduce进行查询。

总之,MongoDB更快,CouchDB更安全。

还:http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb