MongoDb vs Cassandra:读/写神话?

emi*_*lly 8 mongodb cassandra nosql

在网上阅读有关MongoDB与Cassandra读写性能的几篇文章,

一般说来,当数据量很大时,Cassandra的写性能要好于Mongo。请参阅下面的声明。

无论数据集有多大,Cassandra的存储引擎都可以提供恒定时间的写入。在MongoDB中,写入的问题更大,部分原因是基于b树的存储引擎,而更多的是由于每个数据库的写入锁定。

这是我的问题:-这个说法仍然正确吗?据我了解,Mongo支持按文档而不是按数据库锁定。对?那么,目前Cassandra在写性能上是否仍优于Mongo?如果是,为什么?

人们普遍认为Mongo的阅读性能优于Cassandra的阅读性能,但我没有找到任何理由使Mongo的阅读性能优于Cassandra的阅读能力?

更新:-

来自Jared Answer的这个论坛

与在Cassandra中相比,MongoDB的存储引擎中的读取效率更高。Cassandra的存储引擎在写入时表现出色,因为它以仅追加格式存储数据。这样可以充分利用寻道时间短的旋转磁盘驱动器,但是可以非常快速地进行串行写入。但是缺点是,当您进行读取时,通常需要扫描对象的多个版本以获取最新版本以返回给调用者。MongoDB更新数据到位。这意味着它在执行写操作时会执行更多的随机IO,但是这样做的好处是可以更快地处理读操作,因为您可以在一个b树查找中找到对象在磁盘上的确切位置。

它帮助我理解了在删除/编辑现有记录时Cassandra的速度更快,因为它只能最后附加它,而不是像Mongo这样必须先搜索然后再编辑的就地编辑。这使得卡桑德拉在写作上比蒙哥更好

但是同一件事使Mongo慢于Cassandra,因为Cassandra必须扫描同一条记录的多个版本以获取最新版本以返回给调用者

这个博客的另一个原因 为什么cassandra的写作更好

MongoDB及其“单一主机”模型只能在主数据库上进行写入。辅助服务器只能用于读取。因此,从本质上讲,如果您设置了三个节点副本集,则只有主节点进行写操作,而其他两个节点仅用于读取操作。这极大地限制了写可扩展性。您可以部署多个分片,但实际上只有1/3的数据节点可以写入。Cassandra及其“多个主服务器”模型可以在任何服务器上进行写入。本质上,您的写可伸缩性受群集中服务器数量的限制。集群中的服务器越多,扩展性越好。

在同一个博客中,为什么Mongo在阅读方面比Cassandra更好

二级索引是MongoDB中的一类构造。这使索引MongoDB中存储的对象的任何属性变得容易,即使该对象是嵌套的也是如此。这使得根据这些二级索引进行查询非常容易。Cassandra仅对二级索引提供粗略的支持。次要索引也仅限于单列和相等性比较。如果您主要是要通过主键进行查询,那么Cassandra将会很适合您。

Ale*_*981 5

问题的回答: 是的。最新的 MongoDB 支持每个文档的锁https://docs.mongodb.com/manual/core/wiredtiger/

以下是写操作的基准:https : //www.datastax.com/nosql-databases/benchmarks-cassandra-vs-mongodb-vs-hbase根据这些基准, Cassandra 在规模表现更好(在更多节点上集群)。

希望它会帮助你。

以下是有关您的问题的一些详细信息,这也可能有所帮助。

关于卡桑德拉

Cassandra 正在使用针对大量写入进行了优化的 LSM-tree。 https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_manage_ondisk_c.html

一些细节:

执行写入时,数据会立即写入提交日志。提交日志是一种崩溃恢复机制。在写入提交日志之前,写入不会被视为成功。将数据写入提交日志后,将其写入memtable。在 Cassandra 的最新版本中,memtables 主要存储在本机内存中而不是 JVM 堆中。所以它也提高了性能。

当存储在 memtable 中的对象数量达到阈值时,memtable 的内容将刷新到磁盘中名为 SSTable 的文件中。然后创建一个新的内存表。一旦一个 memtable 被刷新到一个 SSTable,它就是不可变的。

将值写入 Cassandra 不需要任何类型的读取或查找,因为所有写入都是追加操作。

关于 MongoDB

默认情况下,MongoDB 使用 MMAPv1 存储引擎,它使用 B 树(https://docs.mongodb.com/manual/core/mmapv1/),但最近版本的 MongoDB 使用 WiredTiger 存储引擎(https://docs. mongodb.com/manual/core/wiredtiger/ ) 也可以支持 LSM-tree。

关于锁:WiredTiger MongoDB 支持文档级锁,但 MMAPv1 支持集合级并发控制。

一些有用的文章:
https://dba.stackexchange.com/questions/121160/mongodb-mmapv1-vs-wiredtiger-storage-engines
https://docs.mongodb.com/manual/faq/concurrency/
的https:// WWW .percona.com/blog/2016/01/06/mongodb-revs-you-up-what-storage-engine-is-right-part-1/

  • 但是是什么让 mongo 在读取性能方面比 Cassandra 更快? (3认同)