为什么我们需要cassandra中的二级索引,它们是如何工作的?

问题描述:

我想知道为什么辅助索引甚至在Cassandra上是必需的。为什么我们需要cassandra中的二级索引,它们是如何工作的?

我知道二级索引的使用,因为:

“次要索引允许,用于通过使用等式谓词特定值有效的查询(其中x列=值y)另外,查询就索引值可以应用附加的过滤器。执行范围查询等操作。“

来自:http://www.datastax.com/docs/0.7/data_model/secondary_indexes

但我不明白的是为什么像查询:

get users where birth_date = 1973; 

需要将birth_date有一个辅助索引。为什么二级索引需要存在? cassandra不能只通过表格,然后在约束匹配时返回值?为什么我们需要以任何特殊的方式来处理我们可能想要以这种方式查询的内容?

我假设cassandra分布并遍历整个表的事实可能并不容易,因为每个行密钥都分配给了一个不同的节点,使得它有点复杂。但我并不真正了解如何使问题分布复杂化,以及二级指标如何解决问题(即cassandra如何解决这个问题?)。

与此问题相关的是,辅助索引和主键是唯一可以在SELECT * FROM column_family_table WHERE col_x = constraint中查询的东西吗?为什么主键很特别?

对于这些nosql数据库意味着要处理的数据量,进行表扫描或区域扫描不是一种选择。这就是Cassandra限制的内容,只有在启用了辅助键时才允许对非行键列进行查询。那样的话,这样的索引和数据将位于相同的数据节点上。

希望它有帮助。

-Vivek

+0

是的,这是有帮助的。作为后续问题,我有点不确定哪些事情可以用这些限制来查询?即只能使用colx =约束来查询二级索引?还是包括整个主键?日Thnx! – Pinocchio

+1

应该同时使用辅助键和主键 –