MongoDb vs CouchDb:为地理位置远程客户端写入速度

我希望所有用户都能够快速读取和写入数据存储。 看起来MongoDb有炽烈的读取,但是写入看起来好像他们可能会非常慢,如果一个主数据库需要位于非常远离客户端。 Couchdb似乎读取速度慢,但在客户端距离主服务器很远的情况下写入的情况如何。 使用couchdb,我们可以拥有多个主设备,这意味着我们总是可以在客户端附近有一个写节点。 在我们的用户群在地理上分散很远的情况下,couchdb实际上可以比MongoDB 更快吗?

我很乐意使用mongoDb,因为它的速度非常快,但是离我唯一的主人很远的一些用户会有一段糟糕的经历。 对于世界各地的系统来说,不会做得更好。 在全球有用户的情况下,是不是完全排除了mongodb? MongoDb,如果你在听,你为什么不做一些简单的多主设置,冲突解决可以成为更新语义的一部分? 这似乎是mongoDb完全支配nosql市场份额之间唯一的东西。 一切都非常令人印象深刻。

披露:我是MongoDB的粉丝和用户,我对CouchDB没有任何经验。

我有一个非常重读的应用程序。 我会说读数大约30:1的因素写道。 mongo的devise读取总是要比写出技巧要快得多(根据我的经验)是使写入效率更高,以便可以将更高比例的系统资源用于写入。

在mongo上build立产品时,要记住的关键是_id字段。 这个字段是自动生成的,并添加到所有的JSON对象,它会看起来像47cc67093475061e3d95369d当你devise你的查询(查找)尽可能尝试和查询在这个领域,因为它包含机器位置(我想也是磁盘位置? ? – 我应该检查这个)对象居住的地方,当你使用这个字段查找或更新将真正加快你的机器。 考虑一下你的系统的devise。

例:

我的数据库中的2个群集是“用户”和“post”。 用户可以创build多个post。 这两个集合在实现我的应用程序时必须相互引用。

在每个post对象中,我存储父用户的_id。 在每个用户对象中,我存储了用户创作的所有post的数组。

现在,在每个用户页面上,我可以生成所有创作的文章的列表,而不需要资源紧张的查询,但可以直接查找_id。 mongo簇越大,这种差异就越大。

如果你完全熟悉oracle的物理位置rowid,那么只有mongo才能理解这个概念。

去年,当我们决定终于把MySQL换成mongo的时候,我感到害怕,但是我可以告诉你以下关于我的经验: – 数据移植总是很糟糕,但是我想象的也一样。 – Mongo可能是最好的文档化的NoSQL DB,而开源社区是非常棒的。 – 当他们说快速和可扩展的没有开玩笑,它苍蝇。 – 在我看来,模式devise非常简单,比键/值typesdb更自然,更有序。 – 整个系统似乎devise为最小的用户复杂性,添加节点等是一件轻而易举的事情。

好的,我认真地发誓mongo没有付钱给我写这个(我希望),但是为了爱情而大为抱歉。

不pipe你select什么,祝你好运。

以下是10gen创build的详细文章,并给出了何时应该selectMongoDB或CouchDB的例子,以及原因。

http://www.mongodb.org/display/DOCS/Comparing+Mongo+DB+and+Couch+DB

编辑

上面的链接被删除,但可以在这里查看: http : //web.archive.org/web/20120614072025/http : //www.mongodb.org/display/DOCS/Comparing+Mongo+DB+and+Couch+ D B

你现在的问题,充满了猜测和猜测。

…为什么我们不能为某些写作select不一致性,只要我们确信写数据的人能够一致地阅读它,而其他人则会观察到最终的一致性

如果这些写入影响其他写入? 如果这些写道会阻止其他人做这些事情呢? 因为你没有告诉我们任何具体情况,所以很难说出可能的副作用。

我主要build议你做一些testing。 除非你testing过,否则关于瓶颈的猜测是完全浪费时间。 您不需要通过远程机器testing它,设置一些本地数据库并添加一些人工延迟,然后运行testing。

通过这种方式,您可以testing您获得的不同选项,查看MongoDB更好的位置,或者CouchDB擅长的位置。 然后,您可以采取其中一个,并与反对者,或者你可以尝试自己调整你的数据库模型,并做更多的testing。

没有人能够为您提供一个通用的解决scheme来解决您的具体问题(除非您给我们所有的代码,并且支付给我们这个工作:P)数据库并不容易,特别是如果您需要按照一定的要求。

对于世界各地的系统来说,不会做得更好。 在全球有用户的情况下,是不是完全排除了mongodb?

MongoDB支持分片。 所以你不需要一个主人。 事实上,它看起来像你有一个准备好的分片键(区域)。

MongoDB也支持副本集和分片。 所以如果你需要在多个数据中心(DC)中运行,你需要把一台主设备和一台副本放在同一个DC中。 实际上,他们还build议将第三个节点添加到单独的DC中作为热备份故障转移。

您将不得不深入研究MongoDB的更详细的configuration,但是您可以确定控制数据的存储位置,并且可以优先考虑DC中的其他副本“升级到Master”。

然而,在这一点上,你已经深入MongoDB的细节,你需要挖掘和“玩”相当多。 但是,对于任何真正要跨数据中心处理主数据的解决scheme,您都需要大量的“播放时间”。