Cassandra vs MongoDB的二级指数?

时间:2018-01-15 17:17:13

标签: mongodb indexing cassandra

blog我看到以下声明

  

辅助索引是MongoDB中的第一类构造。这使得   很容易索引存储在MongoDB中的对象的任何属性,即使   它是嵌套的。这使得基于这些查询非常容易   二级指标。卡桑德拉只是粗略支持中学   索引。二级索引也仅限于单列和   平等比较。

我有两个相关的问题。

  
    

Cassandra只粗略支持二级索引。

  

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

  
    

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

  

我对上述陈述的理解是,cassandra仅支持单列而不是复合列

的二级索引
  
    

二级索引[Cassandra]也仅限于等式比较。      我认为这意味着Mongo可以使用指数比操作更大/更少,但cassandra仅限于平等?

  

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

1 个答案:

答案 0 :(得分:3)

Mongo与...之间的主要区别Cassandra就是这样,Mongo是主/从DB Vs Cassandra是一个无主系统。

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

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

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