【发布时间】:2014-05-04 05:07:30
【问题描述】:
我试图理解为什么在 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的for中唯一可以查询到的东西?为什么主键特殊?
【问题讨论】: