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

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

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


当前回答

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。

其他回答

我相信你可以用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。

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

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

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

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

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

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

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

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

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

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