Cassandra的结果顺序

时间:2017-10-30 09:12:27

标签: cassandra

我对Cassandra的查询结果有两个问题。

  1. 当我在Cassandra(即select * from table)中对表进行“完整”选择时,保证结果将按分区令牌的递增顺序返回? 例如,有下表:

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

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

    select token(id), id from users;
    

    如果是这样,如果数据分发到群集中的多个节点,是否也能保证?

  2. 如果上述问题的答案为“是”,如果我们使用二级索引,它仍然有效吗?例如,如果我们有以下索引:

    create index on users(name);
    

    我们使用索引查询表:

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

    对结果的顺序有任何保证吗?

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

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

      

    如果没有WHERE子句中指定的分区键,则结果集的实际顺序将依赖于userid的散列值。

    然而,官方Cassandra文档中未指定结果的顺序,例如。 SELECT statement

1 个答案:

答案 0 :(得分:2)

  

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

是的

  

如果是这样,如果数据被分发到集群中的多个节点,是否也能保证?

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

  

如果上述问题的答案是“是”,如果我们使用二级索引,它仍然有效吗?

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

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