为什么二级索引 ( = ?) 和聚类列(排序依据)不能一起用于 CQL 查询?



编辑:相关的jira票证

模式select * from <table> where <partition_keys> = ? and <secondary_index_column> = ? order by <first_clustering_column> desc中的查询不起作用,并显示错误 msg:

InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported."

从索引表的结构来看,上面的查询包括分区键和索引表中的前两个聚类列。另请注意,如果没有 order by 子句,结果将按聚类列排序为 CLUSTERING ORDER。

有没有办法使查询工作?如果没有,为什么?

Cassandra 中的数据自然会根据聚类列的排序顺序进行存储。

Cassandra 中的二级索引与关系数据库中的相应索引不同。每个节点的本地,这意味着群集的其他节点不知道其内容。因此,按此索引排序是极不可能的。同样在节点内,二级索引仅保存指向相应分区键的指针。

如果您需要由 Cassandra 执行排序,请将它们作为聚类列。否则,您可以在检索结果后在代码中对它们进行排序。

此外,二级索引对于 Cassandra 来说并不理想,绝对更好的模型是不要将它们放在第一位,以便为将来节省一些麻烦。

相关内容

  • 没有找到相关文章

最新更新