Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 DataStax驱动程序:如何分页浏览列_Cassandra_Cassandra 2.0 - Fatal编程技术网

Cassandra DataStax驱动程序:如何分页浏览列

Cassandra DataStax驱动程序:如何分页浏览列,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,我有宽行和时间戳列。如果我使用DataStax Java驱动程序,我可以使用LIMIT或FETCH_SIZE来分页行结果,但是,我找不到关于如何分页特定行的列的任何细节 我发现这个帖子: 这解释了如何根据列名(时间戳)值获取列的范围 然而,我需要做的是获取所有列,我只是不想将它们全部加载到内存中,而是一次“流化”结果并处理一块列(最好是可控大小),直到处理行中的所有列为止。 DataStax驱动程序是否支持此类流媒体?那么,使用它的语法是什么呢 补充澄清: 本质上,我要寻找的是Hector的Co

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

我发现这个帖子: 这解释了如何根据列名(时间戳)值获取列的范围

然而,我需要做的是获取所有列,我只是不想将它们全部加载到内存中,而是一次“流化”结果并处理一块列(最好是可控大小),直到处理行中的所有列为止。 DataStax驱动程序是否支持此类流媒体?那么,使用它的语法是什么呢

补充澄清: 本质上,我要寻找的是Hector的ColumnSiceIterator的等价物,使用它我可以一次迭代特定行的所有列(最多整数.MAX_VALUE number),例如,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();
}
SliceQuery SliceQuery=HFactory.createSliceQuery(键空间,…);
sliceQuery.setColumnFamily(MY_COLUMN_族);
sliceQuery.setKey(myRowKey);
//要返回的列。空值表示所有列
sliceQuery.setRange(
空//起始列
,null//结束列
,false//颠倒顺序
,Integer.MAX_VALUE//要返回的列数
);
ColumnSiceIterator iter=新ColumnSiceIterator(
sliceQuery//以前创建的切片查询需要作为参数传递
,null//起始列名
,null//结束列名
,假//反

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

谢谢,@RussS,我已经查看了此api文档,但没有找到任何关于在一行中的列上进行分页的确认信息……事实上,是迭代器()和一()方法签名的数据类型是Row,从读取文档来看,他们似乎在谈论获取一行,并将行作为工作单元而不是列进行迭代……我是否遗漏了什么?下面是ResultSet的文档。one()方法:“返回:此ResultSet中的下一行,如果此ResultSet已用尽,则返回null”这里的行是逻辑行,而不是像C*宽的行那样有一个表(X text,y text,z text,PK(X,y))X1=>Y1:Z1,Y2:Z2,Y3:Z3,Y4:Z4,驱动程序将自动缓冲整行X1中的部分,就像首先将{Y1:Z1,Y2:Z2}拉入内存一样经过Y2两次或迭代,它知道它需要缓冲区中的新数据,并将下一个值块{Y3:Z3,Y4:Z4}等等,直到完成。我明白了。因此实际上,这意味着setFetchSize()将控制每个()方法将返回,对吗?感谢您的澄清!还要注意,逻辑行中可能有多个单元格,但基本上是这样的:)