我试图理解为什么在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中查询辅助索引和主键?为什么主键特殊?
答案 0 :(得分:3)
对于这些nosql数据库要处理的数据量,进行表扫描或区域扫描不是一种选择。这就是Cassandra限制并允许仅在启用辅助行的情况下对非行键列进行查询的情况。这样,这些索引和数据将位于同一数据节点上。
希望它有所帮助。
-Vivek