Astyanax键范围查询

时间:2012-10-06 18:53:23

标签: cassandra range astyanax

尝试编写一个查询,该查询将使用astyanax客户端和RowSliceQuery对列族中的所有行进行分页。

keyspace.prepareQuery(COLUMN_FAMILY).getKeyRange(null, null, null, null, 100);

使用hector成功完成此操作,其中第一次调用使用空开始和结束键完成。检索第一页后,我使用结果中的最后一个键来查询第二页等。这是使用hector的第一页的代码。

HFactory.createRangeSlicesQuery(keyspace,
LongSerializer.get(), new CompositeSerializer(),
BytesArraySerializer.get())
.setColumnFamily(COLUMN_FAMILY)
.setRange(null, null, false, 100).setRowCount(100);

现在,当我尝试使用astyanax执行此操作时,我收到有关null和非null键和令牌的错误。不确定此查询中的令牌是做什么的。此外,我可以使用allRows(),但希望使用键范围查询,因为它给了我更多的灵活性。

是否有人使用astyanax进行关键范围查询的示例?我不能在"开始"中找到一个例子。文档或网上的其他任何地方。

谢谢! 安东

2 个答案:

答案 0 :(得分:0)

您所指的是getRowRange方法:

keyspace.prepareQuery(CF_STANDARD1)
  .getRowRange(startKey, endKey, startToken, endToken, count)

但请注意,仅在使用ByteOrderedPartitioner时才有效。因为默认情况下Cassandra使用Murmur3Partitioner,这通常不起作用。建议使用索引来执行此操作。 Astyanax还提供reverse index search配方,该配方利用第二列系列将您的密钥存储为列,以便对原始数据进行有效范围搜索。

答案 1 :(得分:-1)

检查此示例代码。我希望这段代码可以帮助你进行分页。

IndexQuery<String, String> query = keyspace
   .prepareQuery(CF_STANDARD1).searchWithIndex()
   .setRowLimit(10).autoPaginateRows(true).addExpression()
   .whereColumn("Index2").equals().value(42);

最佳,