【问题标题】:Cassandra vs MongoDB in respect of Secondary Index?Cassandra vs MongoDB 在二级索引方面?
【发布时间】:2018-06-24 08:51:40
【问题描述】:

blog 我看到下面的声明

二级索引是 MongoDB 中的一流结构。这使得 很容易索引存储在 MongoDB 中的对象的任何属性,即使 它是嵌套的。这使得基于这些查询变得非常容易 二级索引。 Cassandra 仅粗略地支持辅助 索引。二级索引也仅限于单列和 相等比较。

我有两个相关的问题。

Cassandra 仅粗略地支持二级索引。

不确定是什么让 Mongo 比只有粗略支持的 cassandra 有更好的支持?

二级索引[Cassandra] 也仅限于单列

我对上述说法的理解是,cassandra 只支持单列而不是复合列的二级索引

二级索引[Cassandra] 也仅限于相等比较。 我相信这意味着 Mongo 也可以使用索引来进行大于/小于操作的操作,但 cassandra 仅限于平等?

我的理解是 Mongo 以与 RDBMS 类似的方式实现二级索引,但不确定 cassandra 如何在高级别的方面实现它?

【问题讨论】:

    标签: mongodb indexing cassandra


    【解决方案1】:

    Mongo 和 Cassandra 之间的主要区别在于,Mongo 是主/从 DB,而 Cassandra 是无主系统。

    话虽如此,所有写入都发生在 Mongo 中的单个 PRIMARY 节点上,该节点被复制到 SECONDARIES。因此,整个数据可在单个节点中使用,因此具有二级索引并通过它进行查询变得更简单(就像任何其他 RDBMS 一样)。因此,它支持针对二级索引的所有类型的查询。当我们转向 Mongo Sharded 系统而不是简单的副本集时,它变得复杂了。

    在 Cassandra 的情况下,数据根据分区键分布到多个节点。现在构建二级索引仅与该特定节点上的数据相关,并且不知道其他节点中的数据。因此,在二级索引中查询列会导致分散聚集,因为匹配的数据可能位于任何节点中。由于不涉及分区键来限制节点数量,因此这种类型的查询会非常慢(取决于集群大小)。

    所以在 Mongo 中进行 RANGE 查询没什么大不了的,因为整个数据都在 PRIMARY 节点中可用。而 Cassandra 二级索引的范围扫描意味着扫描该给定节点中的每一行。因此,范围查询可能需要很长时间,因此不受支持。

    【讨论】:

    • JFYI,mongo 数据库也可以分片,still 可以对二级索引进行各种查询。
    • 它的性能与性能的好坏在数据大小上存在很大差异,不。分片的数量和正在执行的查询的复杂性。当我们要求查询非分片键时,我们正在做分散收集并自找麻烦。
    • 同意,最好避免分散收集。尽管当查询遇到分片时,他们享受索引的通常好处。只是之后的合并阶段增加了一些减速。顺便说一句,如果我没记错的话,mongo 不会让你对没有分片键的分片集合运行查询。所以这有点帮助。
    • 有一些特定类型的查询,比如聚合,不能在分片集合上执行。但它也允许对非分片列进行通用查询。它只会变得更慢。
    • @dilsingi 正如你所说的In case of Cassandra, the data is distributed into multiple nodes based on the partition key.我们不能像Mongo那样在cassandra下有simple replicaset instead of shard/partition吗?是否必须根据 cassandra 中的某些键进行分区?另外我理解的是,一旦我们有了分片,mongo 将面临类似的问题(分散和聚集)?
    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2016-06-29
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多