MongoDb 与 CouchDb : write speeds for geographically remote clients

标签 mongodb node.js couchdb

我希望我的所有用户都能够非常快速地读取和写入数据存储。看起来 MongoDb 的读取速度非常快,但是如果需要将一个主数据库放置在离客户端很远的地方,那么写入似乎会非常非常慢。 Couchdb 似乎读取速度很慢,但是在客户端离主服务器很远的情况下,写入情况如何。 使用 couchdb,我们可以拥有多个主 Node ,这意味着我们始终可以在客户端附近拥有一个写入 Node 。在我们的用户群分布在很远的地理位置的情况下,couchdb 的写入速度实际上是否比 mongodb 更快?

我很想使用 mongoDb,因为它的速度非常快,但是我的一些用户离 only master 很远,会有很糟糕的体验。 对于全局范围内的系统类型,couchDb 会不会更好。在全局都有用户的情况下,mongodb不是完全排除了吗? MongoDb,如果你在听,为什么不做一些简单的多主机设置,冲突解决可以成为更新语义的一部分? 这似乎是 mongoDb 完全主导 nosql 市场份额的唯一因素。其他一切都非常令人印象深刻。

最佳答案

披露:我是 MongoDB 的粉丝和用户,我对 CouchDB 的经验为零。

我有一个读写密集型的重型应用程序。我会说读取数量超过写入数量大约为 30:1。 mongo 的设计方式读取总是比写入快得多,诀窍(根据我的经验)是让您的写入非常高效,以便您可以将更高比例的系统资源用于写入。

在 mongo 之上构建产品时,要记住的关键是 _id 字段。该字段会自动生成并添加到您的所有 JSON 对象中,当您设计查询(查找)时,它看起来类似于 47cc67093475061e3d95369d,因为它包含机器位置(我认为也是磁盘位置?? ? - 我应该检查一下)对象所在的位置,因此当您使用查找或更新时使用此字段将真正加快您的机器速度。在您的系统设计中考虑这一点。

例子:

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

在每个帖子对象中,我存储父用户的 _id。 在每个用户对象中,我存储了一个包含用户创作的所有帖子的数组。

现在,我可以在每个用户页面上生成所有已创作帖子的列表,而无需进行资源紧张的查询,而是直接查找 _id。 mongo 集群越大,影响越大。

如果您完全熟悉 oracle 的物理位置 rowid,您可能只在 mongo 中理解这个概念,它更棒更强大。

去年,当我们最终决定放弃 MySQL 转而使用 mongo 时,我感到很害怕,但我可以告诉你以下关于我的经历: - 数据移植总是很糟糕,但它和我想象的一样好。 - Mongo 可能是目前记录最好的 NoSQL DB,开源社区也很棒。 - 当他们说快速和可扩展不是开玩笑的时候,它会飞。 - 在我看来,模式设计比键/值类型数据库更简单、更自然、更有序。 - 整个系统似乎为最小化用户复杂性而设计,添加 Node 等轻而易举。

好吧,说真的,我发誓 mongo 并没有付钱给我写这篇文章(我希望),但为爱情节道歉。

无论你选择什么,祝你好运。

关于MongoDb 与 CouchDb : write speeds for geographically remote clients,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4242793/

相关文章:

javascript - Meteor:将 Mongo 选择器从客户端传递到服务器的最佳方法

Node.js/CouchDB : Use . json 文件而不是数据库 + 版本控制

node.js - DynamoDB 查询相当于 "WHERE author IN [..]"?

couchdb - PouchDB 结构

couchdb - 回到管理派对

mongodb - 查找第二个集合的数组包含第一个集合的数组中的单词的位置

node.js - db.createCollection 不是函数

c++ - 使用 C++ 从 MongoDb 检索 binData 记录

node.js - Node.js插件和wasm之间的比较

node.js - Node JS、Redis 和 Heroku