Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 为什么二级索引(=?)和聚类列(order by)不能一起用于CQL查询?_Cassandra_Cassandra 3.0 - Fatal编程技术网

Cassandra 为什么二级索引(=?)和聚类列(order by)不能一起用于CQL查询?

Cassandra 为什么二级索引(=?)和聚类列(order by)不能一起用于CQL查询?,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,编辑:相关jira 模式select*中的查询,其中=?和=?按描述下单不起作用,错误消息: InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported." 从索引表的开始,上面的查询包括分区键和索引表中的前两个集群列。另外,请注意,如果没有ORDERBY子句,结果将按集群列作为集群顺序进行排序 有什么方法可以让查询正常工作

编辑:相关jira

模式
select*中的查询,其中=?和=?按描述下单
不起作用,错误消息:

InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported."
从索引表的开始,上面的查询包括分区键和索引表中的前两个集群列。另外,请注意,如果没有ORDERBY子句,结果将按集群列作为集群顺序进行排序


有什么方法可以让查询正常工作吗?如果没有,原因是什么?

Cassandra中的数据是根据聚类列的排序顺序自然存储的

Cassandra中的二级索引与关系数据库中的对应索引有很大不同。它的每个节点都是本地的,这意味着集群中的其他节点不知道它的内容。因此,按此索引排序是非常不可能的。同样在节点中,二级索引只包含指向相应分区键的指针

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


此外,二级索引对于Cassandra来说并不理想,更好的模式无疑是首先不使用二级索引,为将来节省一些麻烦。

我的查询是按聚类列而不是索引列对结果进行排序。此外,由于所有分区键都在查询中,因此只能访问分区所在的一个节点。不过,感谢您指出,第二个索引包含指针。如果没有针对指针的顺序保证,那么这就是为什么我们不能使用
orderby
,即使在集群列上也是如此。谢谢您的回答。但恐怕这不是我所期望的。事实上,从一些简单的测试中,我假设每个索引的指针都是按集群列排序的。因此,应该可以支持该查询模式。