Cassandra DataStax驱动程序:如何翻阅列

时间:2015-01-14 15:56:23

标签: cassandra cassandra-2.0

我有带时间戳列的宽行。如果我使用DataStax Java驱动程序,我可以使用LIMIT或FETCH_SIZE来分页行结果,但是,我找不到有关如何分页特定行的列的具体信息。

我找到了这篇文章: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驱动程序执行完全相同的操作?

谢谢!

码头

1 个答案:

答案 0 :(得分:4)

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