何时在MongoDB上使用CouchDB,反之亦然

时间:2012-09-15 13:32:20

标签: mongodb performance comparison couchdb nosql

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

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

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

7 个答案:

答案 0 :(得分:503)

C,A& P(一致性,可用性和分区容差)哪个2对您更重要?快速参考,Visual Guide To NoSQL Systems

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

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

  • MongoDB:如果您需要动态查询。如果您更喜欢定义索引,而不是map / reduce函数。如果你需要在大数据库上有良好的性能。如果你想要CouchDB,但你的数据变化太大,填满了磁盘。
  • CouchDB:用于累积,偶尔更改数据,以便在其上运行预定义的查询。版本控制很重要的地方。

Riyad Kalla最近(2012年2月)和更多comprehensive comparison

  • MongoDB:仅主从复制
  • CouchDB:Master-Master复制

博客文章(2011年10月)由同时尝试过这两篇文章的人撰写, A MongoDB Guy Learns CouchDB 评论CouchDB的分页效果不佳。

benchmark({em> MongoDB背后的团队的一部分)的日期(2009年6月)Kristina Chodorow

我会选择MongoDB。

希望它有所帮助。

答案 1 :(得分:197)

上面的答案使这个故事复杂化。

  1. 如果您计划拥有移动组件,或者需要桌面用户脱机工作,然后将其工作同步到服务器,则需要使用CouchDB。
  2. 如果您的代码只在服务器上运行,那么请使用MongoDB
  3. 那就是它。除非您需要CouchDB(非常棒)复制到移动和桌面设备的能力,否则MongoDB目前具有性能,社区和工具优势。

答案 2 :(得分:50)

非常古老的问题,但它在Google之上,我不太喜欢我看到的答案,所以这是我自己的答案。

Couchdb的开发能力远远超过开发CouchApps的能力。大多数人在经典的3层Web架构中使用CouchDb。

实际上,大多数人的决定因素是MongoDb允许使用类似SQL的语法进行临时查询,而CouchDb没有(你必须创建map / reduce视图,这会转变一些即使创建这些视图,人们也可以使用快速应用程序开发 - 它们与存储过程无关。)

要解决接受答案中提出的问题:CouchDb有一个很好的版本控制系统,但它并不意味着它只适用于(或更适合)版本化很重要的地方。此外,由于其仅附加性质,couchdb具有重写友好性(写入操作立即返回,同时保证不会丢失数据)。

任何人都没有提到的一个非常重要的事情是CouchDb依赖于b树索引。这意味着你是否有1" row"或者20亿,查询时间将始终保持在10毫秒以下。这是一个改变游戏规则的游戏,它使CouchDb成为一个低延迟且易于读取的数据库,这真的不容忽视。

公平而详尽的MongoDb优于CouchDb的优势在于工具和营销。他们拥有适用于所有主要语言和平台的一流公民工具,使得入职变得轻松,这增加了他们的特殊查询,使得从SQL过渡变得更加容易。

CouchDb没有这种级别的工具 - 即使现在有很多库可用 - 但CouchDb作为HTTP API公开,因此很容易用你喜欢的语言创建一个包装器来与它交谈。我个人喜欢这种方法,因为它避免了膨胀,并允许你只采取你想要的(界面隔离原则)。

所以我说使用其中一个主要是对他们的范例的安慰和偏好。 CouchDb方法"适合某些人,但是如果在了解了数据库功能之后(在详尽无遗的official guide中)你就没有#34;地狱是啊&#34 ;那一刻,你应该继续前进。

如果您只是想使用"正确工作的正确工具"我不鼓励使用CouchDb。因为你会发现你不能以那种方式使用它,你最终会生气并写博客帖子,例如"在CouchDb中加入哪些?"和"交易管理在哪里?"。事实上,Couchdb是 - 自相矛盾 - 非常透明,但同时需要一种范式转换,以及改变你处理问题的方式来真正发挥(并真正起作用)。

但是一旦你完成了它,它真的会有回报。我个人需要非常强烈的理由或者在项目中选择另一个数据库来进行重大交易,但到目前为止我还没有遇到任何数据库。

答案 3 :(得分:31)

亲自问这个问题?您将决定数据库的选择。

  1. 您需要 master-master 吗?然后是CouchDB。主要是CouchDB支持主 - 主复制,预计节点会长时间断开连接。 MongoDB在这种环境下表现不佳。
  2. 您需要 MAXIMUM R / W吞吐量吗?然后是MongoDB
  3. 您是否需要最终的单服务器持久性,因为您只需要一台数据库服务器?然后是CouchDB。
  4. 您是否存储了需要分片的 MASSIVE数据设置,同时保持疯狂的吞吐量?然后是MongoDB。
  5. 您需要强大的一致性数据吗?然后是MongoDB。
  6. 您需要高可用性的数据库吗?然后是CouchDB。
  7. 您希望多数据库和多表/集合吗?然后是MongoDB
  8. 您有移动应用离线用户,并希望将其活动数据同步到服务器?那你需要CouchDB。
  9. 您需要多种查询引擎吗?然后是MongoDB
  10. 您是否需要使用大型社区来使用数据库?然后是MongoDB

答案 4 :(得分:24)

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

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

答案 5 :(得分:20)

请注意MongoDB中稀疏唯一索引的问题。我打了它,解决方法非常麻烦。

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

我提出的唯一解决方法是使用一个特殊的null值系列,其中空值转换为连接到uuid的特殊前缀(如 null:)。这是一个真正的头痛,因为在编写/查询/阅读时,必须注意转换为空值或从空值转换。一个主要的麻烦。

我从未在MongoDB中使用过服务器端javascript执行(无论如何都不建议),当只有一个Mongo节点时,它们的map / reduce性能很差。由于所有这些原因,我现在正在考虑查看CouchDB,也许它更符合我的特定情况。

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

答案 6 :(得分:4)

我相信你可以使用Mongo(更熟悉它),并且非常确定你也可以用沙发。

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

他们都这样做你可能想看看其他使用的因素:你关心的其他功能,受欢迎程度等.Google见解,Indeed.com工作帖可以看待人气。

你可以尝试一下我认为你应该可以在5分钟内运行mongo。

相关问题