Cassandra DataStax 驱动程序:如何对列进行分页

Cassandra DataStax driver: how to page through columns

我有带有时间戳列的宽行。如果我使用 DataStax Java 驱动程序,我可以使用 LIMIT 或 FETCH_SIZE 对行结果进行分页,但是,我找不到关于如何为特定行分页的任何细节。

我找到这个 post:http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/CQL-3-and-wide-rows-td7594577.html 这解释了我如何根据列名(时间戳)值获取列范围。

但是,我需要做的是获取所有列,我只是不想将它们全部加载到内存中,而是 "stream" 结果并处理一大块列(最好是可控大小)一次,直到处理完该行的所有列。 DataStax 驱动程序是否支持这种流式传输?所以 - 使用它的语法是什么?

补充说明: 本质上,我正在寻找的是 Hector 的 ColumnSliceIterator 的等价物,我可以使用它来分批迭代特定行的所有列(最多 Integer.MAX_VALUE 数量),例如一次 100 列,如下所示:

SliceQuery sliceQuery = HFactory.createSliceQuery(keySpace, ...);
sliceQuery.setColumnFamily(MY_COLUMN_FAMILY);
sliceQuery.setKey(myRowKey);
// columns to be returned. The null value indicates all columns
sliceQuery.setRange(
    null // start column
    , null // end column
    , false // reversed order
    , Integer.MAX_VALUE // number of columns to return
);

ColumnSliceIterator iter = new ColumnSliceIterator( 
    sliceQuery // previously created slice query needs to be passed as parameter
    , null // starting column name
    , null // ending column name
    , false // reverse
    , 100 // column count <-- the batch size 
);
while (iter.hasNext()) {
    String myColumnValue = iter.next().getValue();
}

如何使用 DataStax 驱动程序执行完全相同的操作?

谢谢!

玛丽娜

您获得的 ResultSet 对象实际上设置为默认为您执行这种分页。重复调用 one() 或使用 iterator() 进行迭代将允许您访问所有数据,而无需一次将其全部调用到内存中。 api 中提供了更多详细信息。