Java 通过hector API在cassandra中为用户定义的查询分页

Java 通过hector API在cassandra中为用户定义的查询分页,java,cassandra,Java,Cassandra,是否可以通过hector API在cassandra中为用户定义的查询实现分页 如果是,怎么做?我添加了一个基本方法,其余的事情你必须处理。在这里,您可以看到,我们将页面大小定义为100行,每行有10列。现在,在第一次迭代之后,您必须了解如何存储最后一个键值,这将是迭代的起点 int row_count = 100; RangeSlicesQuery<UUID, String, Long> rangeSlicesQuery = HFactory .c

是否可以通过hector API在cassandra中为用户定义的查询实现分页


如果是,怎么做?

我添加了一个基本方法,其余的事情你必须处理。在这里,您可以看到,我们将页面大小定义为100行,每行有10列。现在,在第一次迭代之后,您必须了解如何存储最后一个键值,这将是迭代的起点

    int row_count = 100;

    RangeSlicesQuery<UUID, String, Long> rangeSlicesQuery = HFactory
        .createRangeSlicesQuery(keyspace, UUIDSerializer.get(), StringSerializer.get(), LongSerializer.get())
        .setColumnFamily("Column Family")
        .setRange(null, null, false, 10)
        .setRowCount(row_count);

    UUID last_key = null;

    while (true) {
        rangeSlicesQuery.setKeys(last_key, null);
        System.out.println(" > " + last_key);

        QueryResult<OrderedRows<UUID, String, Long>> result = rangeSlicesQuery.execute();
        OrderedRows<UUID, String, Long> rows = result.get();
        Iterator<Row<UUID, String, Long>> rowsIterator = rows.iterator();

        if (last_key != null && rowsIterator != null) rowsIterator.next();   

        while (rowsIterator.hasNext()) {
          Row<UUID, String, Long> row = rowsIterator.next();
          last_key = row.getKey();

          if (row.getColumnSlice().getColumns().isEmpty()) {
            continue;
          }

        }

    }
}
int行计数=100;
RangeScileSquery RangeScileSquery=HFFactory
.CreateRangeS切片器(键空间、UUISerializer.get()、StringSerializer.get()、LongSerializer.get())
.setColumnFamily(“列族”)
.setRange(null、null、false、10)
.setRowCount(行数);
UUID last_key=null;
while(true){
设置键(最后一个键,null);
System.out.println(“>”+最后一个_键);
QueryResult result=rangeSlicesQuery.execute();
OrderedRows rows=result.get();
迭代器rowsIterator=rows.Iterator();
if(last_key!=null&&rowsIterator!=null)rowsIterator.next();
while(rowsIterator.hasNext()){
Row=rowsIterator.next();
last_key=row.getKey();
if(row.getColumnSicle().getColumns().isEmpty()){
继续;
}
}
}
}

您提出的问题似乎很有可能,也许一些用户定义查询的示例可以帮助我们提供solution@abhijitselect*from您没有考虑到我必须启动自己的查询,比如select*from,我在您的示例中看不到它我在示例中没有提到这些东西,由于这些内容取决于where子句,无论是在索引列上还是仅在键上,都必须相应地选择适当的切片器(RangeSlicesQuery、IndexedLicesQuery、MultigetSliceQuery)。见赫克托的例子