【问题标题】:Astyanax key range queryAstyanax 键范围查询
【发布时间】:2014-12-02 03:26:52
【问题描述】:

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

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

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

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

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

有人有使用 astyanax 进行键范围查询的示例吗?我在“入门”文档或网络上的任何其他地方都找不到示例。

谢谢! 安东

【问题讨论】:

    标签: cassandra range astyanax


    【解决方案1】:

    你指的是getRowRange方法:

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

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

    【讨论】:

      【解决方案2】:

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

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

      最好的,

      【讨论】:

      • 不,他想对行键进行分页,而不是进行索引搜索。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多