【问题标题】:Cassandra DataStax driver: how to page through columnsCassandra DataStax 驱动程序:如何对列进行分页
【发布时间】:2015-03-12 21:12:51
【问题描述】:

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

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

但是,我需要做的是获取所有列,我只是不想将它们全部加载到内存中,而是“流式传输”结果并处理一大块列(最好是可控大小)直到该行的所有列都被处理的时间。 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 驱动程序做同样的事情?

谢谢!

码头

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

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

    【讨论】:

    • 谢谢,@RussS,我已经查看了这个 API 文档,但找不到任何确认分页正在一行中的列上发生......事实上,iterator() 和 one()方法签名将 Row 作为数据类型,从阅读文档来看,他们似乎在谈论获取一个 Row,并迭代 Rows 作为工作单元,而不是列......我在这里遗漏了什么吗?这是 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} 拉入内存。然后,一旦你调用 one() 两次或遍历 Y2,它就知道它需要缓冲区中的新数据,并将下一个值块 {Y3:Z3, Y4:Z4} 等等,直到你完成。
    • 我明白了。所以实际上这意味着 setFetchSize() 将控制每个 one() 方法将返回的列(单元格)的数量,对吗?感谢您的澄清!
    • 另请注意,您可能在逻辑行中有多个单元格,但这基本上是怎么回事:)
    猜你喜欢
    • 2016-02-27
    • 2017-01-20
    • 2014-05-04
    • 2016-11-29
    • 2018-02-15
    • 2013-12-23
    • 2015-10-25
    • 2020-02-01
    • 2016-10-02
    相关资源
    最近更新 更多