我被困在这两个NoSQL数据库之间。
在我的项目中,我将在数据库中创建一个数据库。例如,我需要一个创建动态表的解决方案。
因此用户可以创建包含列和行的表。我认为MongoDB或CouchDB对此都有好处,但我不确定是哪一个。我也需要有效的分页。
答案 0 :(得分:503)
C,A& P(一致性,可用性和分区容差)哪个2对您更重要?快速参考,Visual Guide To NoSQL Systems
博客文章Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison比较了每个NoSQL数据库的“最佳使用”方案。引用链接,
Riyad Kalla最近(2012年2月)和更多comprehensive comparison,
博客文章(2011年10月)由同时尝试过这两篇文章的人撰写, A MongoDB Guy Learns CouchDB 评论CouchDB的分页效果不佳。
benchmark({em> MongoDB背后的团队的一部分)的日期(2009年6月)Kristina Chodorow,
我会选择MongoDB。
希望它有所帮助。
答案 1 :(得分:197)
上面的答案使这个故事复杂化。
那就是它。除非您需要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)
亲自问这个问题?您将决定数据库的选择。
答案 4 :(得分:24)
我总结了那篇文章中的答案:
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。