ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

我希望他们能够修改系统,以更好地促进他们正在寻找的主题问题的创建,并更好地将用户引导到该问题。我不知道这个问题是否曾经得到解决,也没有方便的方法来追踪它。
我希望他们会在这个网站中添加功能,我们可以“赞成”或“反对”这个问题本身作为“离题”的原因,这可能有助于将这些类型的问题转回“主题”。
++ 我不清楚为什么这是题外话。这个问题确实有明确的客观答案——OP 不是征求意见,而是征求关于这两个系统的客观信息。 user799188 提供了一个很好的客观答案。
我猜管理员只看问题是否包含任何代码,而不是正在寻找的信息类型。顺便说一句,你总是可以投票重新提出问题。
这个问题刚刚重新打开。欢迎回来,大家...

F
Flimzy

C, A & P(一致性、可用性和分区容限)哪两个对您来说更重要?快速参考,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:主-主复制

A MongoDB Guy Learns CouchDB 的一篇博文(2011 年 10 月)由尝试过这两种方法的人评论说 CouchDB 的分页没有那么有用。

Kristina ChodorowMongoDB 背后的团队成员)的日期(2009 年 6 月)benchmark

我会选择 MongoDB。

希望能帮助到你。


据我了解,MongoDB 在任何方面都不一致:ivoras.sharanet.org/blog/tree/…
当时的信息很好,但这真的很老了……很多东西都发生了变化(包括 Mongo 的 REST 接口)。
我认为这可能有点误导,但 couchdb 中的版本控制不是一个论点。 couchdb 使用的版本控制方案不应该被用作版本控制。它用于处理分区。在数据库压缩期间,修订将被删除,就像真正删除一样。并且只有 rev 链应该保留在数据库中。如果你想在 couchdb 中处理版本,它应该像在 mongodb 中一样。
我将添加到 couchdb 可以拥有自包含 Web 应用程序的列表中。 couchdb 实际上是一个网络服务器。
我很惊讶 332 票给了一个错误的答案。 MongoDB 默认为 CP,CouchDB 为 AP stackoverflow.com/questions/11292215/…
E
Ewan Makepeace

最重要的答案使故事复杂化。

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

而已。除非您需要 CouchDB 的(很棒的)复制到移动和桌面设备的能力,否则 MongoDB 目前具有性能、社区和工具优势。


“哈哈,你的数据有多少?” - 真的是这样吗?我可能会选择 CDB,因为我的数据很大 - 或者我可能会选择它,因为它比其他替代方案具有更好的复制能力。在这种情况下,我们将数据集过滤到每台设备大约 100Mb-200Mb。那是一件坏事?
如果您的代码只能在一台服务器上运行。使用多主复制可以更轻松地整理出高可用性系统。
我同意这个答案。 #1 是我选择使用 CouchDB 的原因,我并不后悔。对我来说,这可能比那些有 SQL 背景的人更容易,因为我从未将 SQL 用于我的 Web 应用程序。在应用程序的客户端使用 PouchDB.js 将使 CouchDB 的使用更加容易。您可以在 pouchdb.com 上找到它。
@Daniel W。您知道过滤复制是正确的吗?
t
tobiak777

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

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

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

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

任何人都没有提到的一件非常重要的事情是 CouchDb 依赖于 b-tree 索引这一事实。这意味着无论你有 1 个“行”还是 200 亿个,查询时间都将始终保持在 10ms 以下。这是一个游戏规则改变者,它使 CouchDb 成为一个低延迟且易于阅读的数据库,这一点确实不容忽视。

公平地说,MongoDb 相对于 CouchDb 的优势在于工具和营销。他们拥有适用于所有主要语言和平台的一流公民工具,使入门变得容易,这添加到他们的临时查询中,使从 SQL 的过渡更加容易。

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

所以我想说使用其中一个在很大程度上是他们的范式的舒适和偏好问题。对于某些人来说,CouchDb 方法“恰到好处”,但是如果在了解了数据库功能(在详尽的 official guide 中)之后,您还没有“该死的”时刻,您可能应该继续前进。

如果您只想使用“正确的工具完成正确的工作”,我不鼓励使用 CouchDb。因为你会发现你不能那样使用它,你最终会生气并写博客文章,例如“CouchDb 中的连接在哪里?”和“事务管理在哪里?”。事实上,Couchdb - 矛盾的是 - 非常透明,但同时需要范式转变和处理问题的方式的改变才能真正发光(并且真正起作用)。

但是一旦你做到了,它真的会得到回报。我个人需要非常充分的理由或项目的重大交易破坏者来选择另一个数据库,但到目前为止我还没有遇到任何问题。


2016 年更新:自 2016 年 9 月发布 2.0 版以来,CouchDb 支持开箱即用的即席查询 :)
CouchDb relies on b-tree indexes. This means that whether you have 1 "row" or 20 billions, the querying time will always remain below 10ms. 几乎所有数据库不都是这样吗?这种措辞方式暗示了其他情况。
@Shelvacu 确实,您说得对,CouchDB 在这方面的特别之处在于,在使用 Map/Reduce 时,您可以确保所有查询将始终使用预计算和增量索引(而对于其他数据库,查询计划器可能选择不使用任何索引,或者开发人员可能写得不好查询或犯了错误导致查询进行表扫描)。相比之下,在 CouchDB 中,所有查询总是利用带有 CouchDB Map/reduce 的预先计算的 b-tree 索引,这使得它们非常快。
但是,如果您使用 CouchDB 2.0(称为 Mango)中引入的 ad-hoc 查询样式,则行为难以预测,并且如果您在查询中使用某些运算符,则可能会在内存中进行一些过滤。这就是我个人更喜欢始终使用 Map/Reduce 的原因,因为这可以保证所有查询都将使用预先计算的 b-tree 来回答以获得最佳性能。 CouchDb 查询的预计算、增量和非常可预测的特性是其主要优势之一。
m
marc_s

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

你需要大师大师吗?然后是 CouchDB。主要是 CouchDB 支持 master-master 复制,它预计节点会长时间断开连接。 MongoDB 在那种环境中表现不佳。您需要最大的 R/W 吞吐量吗?那么 MongoDB 你是否需要终极的单服务器持久性,因为你只需要一个数据库服务器?然后是 CouchDB。您是否正在存储需要分片同时保持疯狂吞吐量的海量数据集?然后是 MongoDB。您需要数据的强一致性吗?然后是 MongoDB。您需要数据库的高可用性吗?然后是 CouchDB。您希望多数据库和多表/集合吗?那么 MongoDB 你有一个移动应用离线用户,想要将他们的活动数据同步到服务器?然后你需要 CouchDB。您需要种类繁多的查询引擎吗?那么 MongoDB 你需要大型社区来使用数据库吗?然后是 MongoDB


从 CouchDB 2.x 开始,#9 是 CouchDB 和 MongoDB 之间的虚拟联系。
A
Alexis Dufrenoy

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

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


m
mark

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

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

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

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

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


确实应该。考虑一个描述公司的实体。它必须有一个唯一的企业编号,并且可能有一个企业名称,如果存在,它必须是唯一的。这个例子有些简化,但并不牵强。
稀疏唯一索引的另一个示例可能是具有 national id number 字段的 client 表,根据定义,该字段是唯一的 - 但可能是未知的(也许客户是外国人)。
关键是这个概念有真正的用途,而 MongoDB 只是做得不对。
Mongo 的聚合框架(在 2.4.8 版中)比他们的 map-reduce 工作得更好,而且在我看来,更容易使用和环绕你的头脑(如果你习惯于 map-reduce,我相信情况并非如此,我只是拿了mongodb类,聚合框架很灵活)。即将发布的 2.6.8 将聚合结果作为游标而不是文档返回,消除了以前应用于 mapresult 和聚合调用的内存限制。
@mark 我知道这可能不是很令人满意,但是通过一些小技巧和愚蠢的做法(我的直觉已经感觉很糟糕),您可以拥有同时满足两者的索引。您拥有现有的稀疏唯一索引。然后创建另一个不唯一或稀疏的索引,但将另一个字段添加到索引中(在相关字段之后)。然后你可以使用查询提示来强制优化器选择正确的索引(当我测试这个时,我需要在稀疏的唯一索引上强制提示以查找精确匹配/范围,但不需要提示来查找 { $exists: false})。
d
dm.

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

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

他们都这样做,您可能想查看其他要使用的因素:您关心的其他功能、受欢迎程度等。谷歌洞察力、indeed.com 职位发布将是查看受欢迎程度的方法。

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅