【发布时间】:2018-06-06 19:43:18
【问题描述】:
在网上阅读几篇关于 MongoDB 与 Cassandra 读/写性能的文章,
写
一般来说,Cassandra 的写入性能在数据量很大的情况下比 Mongo 的要好。请参阅下面的声明。
Cassandra 的存储引擎无论如何都提供恒定时间写入 大你的数据集增长。写入在 MongoDB 中更成问题, 部分是因为基于 b-tree 的存储引擎,但更多是因为 每个数据库的写锁。
这是我的问题:- 这个陈述仍然正确吗?据我了解,Mongo 支持每个文档而不是每个数据库的锁定。正确的?那么目前Cassandra在写性能上还是比Mongo更好吗?如果是,为什么?
阅读
一般来说,Mongo 的读取性能比 Cassandra 好,但我没有找到任何理由让 Mongo 的读取性能优于 Cassandra 的?
更新:-
来自 this forum 的 Jared Answer
在 MongoDB 的存储引擎中读取比在存储引擎中更有效 卡桑德拉。 Cassandra 的存储引擎在写入方面表现非常出色 因为它以仅附加格式存储数据。这很有用 具有较差寻道时间但可以进行串行操作的旋转磁盘驱动器 写得很快。但缺点是,当你阅读时,你 通常需要扫描一个对象的多个版本才能获得 返回给调用者的最新版本。 MongoDB 更新数据 地方。这意味着它在处理写入时会执行更多随机 IO, 但它的好处是在处理读取时更快,因为 您可以在一个 b-tree 中找到对象在磁盘上的确切位置 查找。
它帮助我了解 Cassandra 在删除/编辑现有记录时更快,因为它必须最后附加它,而不是像 Mongo 那样必须先搜索然后编辑它的地方编辑。这使得 cassandra 在编写方面比 Mongo 更好
但同样的事情让 Mongo 比 Cassandra 慢,因为 Cassandra 必须扫描同一记录的多个版本才能获取最新版本以返回给调用者
blog 的另一个原因是为什么 cassandra 写得更好
具有“单主”模型的 MongoDB 只能在 基本的。辅助服务器只能用于读取。所以 本质上,如果您有三个节点副本集,则只有主节点是 进行写入,其他两个节点仅用于读取。这 极大地限制了写入可扩展性。您可以部署多个分片,但 基本上只有 1/3 的数据节点可以写入。卡桑德拉 凭借其“多主”模型,可以在任何服务器上进行写入。 本质上,您的写入可扩展性受到服务器数量的限制 你在集群中。集群中的服务器越多, 更好地扩展。
来自同一个 blog 为什么 Mongo 在阅读方面比 cassandra 更好
二级索引是 MongoDB 中的一流结构。这使得 很容易索引存储在 MongoDB 中的对象的任何属性,即使 它是嵌套的。这使得基于这些查询变得非常容易 二级索引。 Cassandra 仅粗略地支持辅助 索引。二级索引也仅限于单列和 平等比较。如果您主要是通过 主键,那么 Cassandra 就可以很好地为您工作。
【问题讨论】: