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 中提供了更多详细信息。
我有带有时间戳列的宽行。如果我使用 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 中提供了更多详细信息。