如何用astyanax从cassandra CF读取所有1000行

时间:2013-07-15 20:05:26

标签: cassandra astyanax

我们有一个CF只有大约1000行。有没有办法让astyanax读取所有1000行?节俭甚至支持吗?

感谢, 迪安

1 个答案:

答案 0 :(得分:3)

您可以使用thrift调用get_range_slices读取所有行。请注意,它以令牌顺序返回行,而不是键顺序。因此,可以读取所有行,但不要跨行键执行范围。

您可以使用getAllRows()在Astyanax中使用它。以下是一些示例代码(从https://github.com/Netflix/astyanax/wiki/Reading-Data#iterate-all-rows-in-a-column-family处的文档中复制)

Rows<String, String>> rows;
try {
    rows = keyspace.prepareQuery("ColumnFamilyName")
        .getAllRows()
        .setBlockSize(10)
        .withColumnRange(new RangeBuilder().setMaxSize(10).build())
        .setExceptionCallback(new ExceptionCallback() {
             @Override
             public boolean onException(ConnectionException e) {
                 try {
                     Thread.sleep(1000);
                 } catch (InterruptedException e1) {
                 }
                 return true;
             }})
        .execute().getResult();
} catch (ConnectionException e) {
}

// This will never throw an exception
for (Row<String, String> row : rows.getResult()) {
    LOG.info("ROW: " + row.getKey() + " " + row.getColumns().size());
}

这将返回每行的前10列,分10行。增加传递给RangeBuilder()。setMaxSize的数字以获得更多(或更少)列。