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

何时在MongoDB上使用CouchDB,反之亦然,mongodb,performance,comparison,couchdb,nosql,Mongodb,Performance,Comparison,Couchdb,Nosql,我被困在这两个NoSQL数据库之间 在我的项目中,我将在数据库中创建一个数据库。例如,我需要一个创建动态表的解决方案 因此,用户可以创建包含列和行的表。我认为MongoDB或CouchDB都有好处,但我不确定是哪一个。我还需要高效的分页功能。我相信您可以使用Mongo(更熟悉它),也可以使用Coach 两者都是面向文档的(基于JSON),因此文档中没有“列”,而是字段——但它们可以是完全动态的 他们都能做到这一点。你可能想看看其他因素,比如你关心的其他功能,人气等等。谷歌的洞察,甚至是.com的

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

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


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

我相信您可以使用Mongo(更熟悉它),也可以使用Coach

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

他们都能做到这一点。你可能想看看其他因素,比如你关心的其他功能,人气等等。谷歌的洞察,甚至是.com的招聘帖子,将是衡量人气的方法

您可以试一试,我认为您应该能够在5分钟内运行mongo。

关于C、A&p(一致性、可用性和分区容差),哪两个对您更重要?快速参考

  • MongodB:一致性和分区容差
  • CouchDB:可用性和分区容差
在一篇博客文章中,比较了每个NoSQL数据库的“最佳使用”场景。引用链接

  • MongoDB:如果您需要动态查询。如果您更喜欢定义索引,而不是映射/减少函数。如果你需要在一个大的数据库上有好的性能。如果您想要CouchDB,但您的数据更改太多,会填满磁盘
  • CouchDB:用于积累、偶尔更改的数据,在这些数据上运行预定义的查询。版本控制非常重要的地方
Riyad Kalla最近(2012年2月)的一篇及更多文章

  • MongoDB:仅主从复制
  • CouchDB:主复制
一位尝试了这两种方法的人在博客(2011年10月)上评论说CouchDB的分页没有那么有用

A日期为(2009年6月)(MongoDB背后团队的一部分)

我会选择MongoDB


希望有帮助。

注意MongoDB中稀疏唯一索引的问题。我已经成功了,解决这个问题非常麻烦

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

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

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


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

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

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

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

总之,MongoDB更快,CouchDB更安全


另外:

以上的答案使故事变得复杂

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

  • 就这样。除非您需要CouchDB(令人敬畏的)复制到移动和桌面设备的能力,否则MongoDB目前具有性能、社区和工具优势。

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

    Couchdb的功能远不止开发Couchapp。大多数人在经典的三层web体系结构中使用CouchDb

    实际上,对于大多数人来说,决定性的因素是MongoDb允许使用类似SQL的语法进行即席查询,而CouchDb则不允许(您必须创建map/reduce视图,这会让一些人关闭,即使创建这些视图对快速应用程序开发是友好的——它们与存储过程无关)

    为了解决公认答案中提出的问题:CouchDb有一个很好的版本化系统,但这并不意味着它只适合(或更适合)版本化非常重要的地方。此外,couchdb由于其仅附加的特性(写入操作会立即返回,同时保证不会丢失任何数据),因此具有很强的写友好性

    有一件非常重要的事情没有被任何人提及,那就是CouchDb依赖于b树索引。这意味着无论您有1“行”还是200亿,查询时间都将始终保持在10ms以下。这是一个游戏规则改变者,它使CouchDb成为一个低延迟和可读性好的数据库,这真的不应该被忽视

    公平且详尽地说,MongoDb相对于CouchDb的优势在于工具和营销。他们拥有适用于所有主要语言和平台的一流citizen工具,这使得登船操作变得更加容易,而这一点加上他们的临时查询,使得从SQL的转换更加容易

    CouchDb没有这种级别的工具——尽管现在有很多可用的库——但是CouchDb是作为HTTP API公开的,因此在yo中创建包装器非常容易