Cassandra的结果顺序

我在Cassandra中有两个关于查询结果的问题.

>当我在Cassandra中对表进行“完全”选择时(即从表中选择*),是否可以保证结果将按分区令牌的递增顺序返回?
例如,有下表:

create table users(id int, name text, primary key(id));

是否可以保证以下查询将返回结果,并在令牌列中增加值?

select token(id), id from users;

如果是这样,如果数据分发到群集中的多个节点,是否也能保证?
>如果上述问题的答案为“是”,如果我们使用二级索引,它仍然有效吗?例如,如果我们有以下索引:

create index on users(name);

我们使用索引查询表:

select token(id), id from users where name = 'xyz';

关于结果的顺序是否有任何保证?

上述问题的动机是,如果在实现分页和/或恢复损坏的较长“数据导出”时令牌是正确的.

编辑:网上有多个资源表明订单与令牌订单匹配(例如,在partitioner resultsthis Datastax page的描述中):

Without a partition key specified in the WHERE clause, the actual order of the result set then becomes dependent on the hashed values of userid.

但是,官方Cassandra文档中没有指定结果的顺序,例如. SELECT statement

Is it guaranteed that the following query will return the results with increasing values in the token column?

是的

If so, is it also guaranteed if the data is distributed to multiple nodes in the cluster?

数据分布与检索数据的排序正交,没有关系

If the anwer to the above question is ‘yes’, is it still valid if we use secondary index?

是的,即使您使用辅助索引(无论是SASI还是本机实现)查询数据,返回的结果将始终按令牌顺序排序.为什么?技术说明在我的博客文章中给出:http://www.doanduyhai.com/blog/?p=13191#cluster_read_path

这就是解释为什么如果你希望搜索返回按某些列值排序的数据,那么SASI不适合的主要原因.只有真正的搜索引擎集成(如Datastax Enterprise Search)才能为您提供正确的排序,因为它绕过了集群读取路径层.

相关文章
相关标签/搜索