Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 java驱动程序queryBuilder的自然排序是什么_Cassandra - Fatal编程技术网

cassandra java驱动程序queryBuilder的自然排序是什么

cassandra java驱动程序queryBuilder的自然排序是什么,cassandra,Cassandra,我有一个cassandra表,分区键作为电子邮件,集群键作为topicString和eventAttimestamp,我需要查询该表以获取最近的N个主题,最近的主题由eventAt确定,以下是我的查询: BuiltStatement builtStatement = QueryBuilder.select() .all() .from("email_table") .where(Query

我有一个cassandra表,分区键作为电子邮件,集群键作为topicString和eventAttimestamp,我需要查询该表以获取最近的N个主题,最近的主题由eventAt确定,以下是我的查询:

BuiltStatement builtStatement =
        QueryBuilder.select()
            .all()
            .from("email_table")
            .where(QueryBuilder.eq(Email.COLUMN_EMAIL, bindMarker()))
            .and(QueryBuilder.eq(Email.COLUMN_TOPIC, bindMarker()))
            .limit(bindMarker());

结果按eventAt列按desc顺序排序,虽然这是我期望的结果,但我想知道Cassandra如何处理查询结果排序?我原以为它是按asc顺序按事件顺序排列的,但显然它不是Cassandra通常根据聚类列的定义返回按顺序排列的数据。如果你有这样的表:

create table tbl (
  email text,
  topic text,
  eventAt timestamp,
  ....,
  primary key (email, topic, eventAt)
) with clustering order by (topic asc, eventAt desc);
然后,当您查询数据时,数据将以排序的形式返回-因为它们存储在磁盘上-根据群集顺序中的定义by SSTables是排序字符串表的首字母缩写,并按顺序读取:

首先按主题按升序排序 在特定主题内,由eventAt按降序排列 在查询数据时,您对更改排序顺序的支持可能有限,但这只是更改读取数据的顺序,如果您有多个聚类列,您可能会对结果感到惊讶-通常它只适用于查询中使用的最后一个聚类列

如果希望有N个最近的主题,则需要有另一个表,其中eventAt作为第一个集群列:

create table tbl (
  email text,
  topic text,
  eventAt timestamp,
  ....,
  primary key (email, eventAt, topic)
) with clustering order by (topic asc, eventAt desc);
然后你可以很容易地得到最后N个主题应用选择。。。来自tbl。。。限制,限制