【问题标题】:Datastax Cassandra Java Driver 4 paging problemDatastax Cassandra Java Driver 4 分页问题
【发布时间】:2020-10-20 20:00:53
【问题描述】:

我需要以分页方式从我的 cassandra 数据库表中获取结果。我正在使用 spring boot 版本 2.3.1,而后者又使用 cassandra java 驱动程序 4。在以前的驱动程序版本中,分页时没有问题,并且驱动程序用于获取等于指定页面大小的结果,如下所示:

Where select = QueryBuilder.select("column1", "column2", "column3")
    .from("my_table")
    .where(QueryBuilder.eq("column4", "some_value"))
    .and(QueryBuilder.eq("column5", "some_value"));

select.setFetchSize(5);

if (!page.equals("0"))
    select.setPagingState(PagingState.fromString(page));
ResultSet results = cassandraTemplate.getCqlOperations().queryForResultSet(select);
PagingState nextPage = results.getExecutionInfo().getPagingState();
int remaining = results.getAvailableWithoutFetching(); // gives 5 results as specified

在 Java 驱动程序版本 4 中,该方法已从 setFetchSize(int) 更改为 setPageSize(int)。但同样的事情在这里不起作用。即使在指定大小之后,它也会获取所有结果:

SimpleStatement stmt = QueryBuilder.selectFrom("my_keyspace", "my_table")
    .columns(Arrays.asList("column1", "column2", "column3"))
    .where(Relation.column("column4")
             .isEqualTo(QueryBuilder.literal("some_value")),
           Relation.column("column5")
             .isEqualTo(QueryBuilder.literal("some_value))).build();

stmt.setPageSize(5);
if (!page.equals("0"))
    stmt.setPagingState(Bytes.fromHexString(page));

ResultSet results = cassandraTemplate.getCqlOperations().queryForResultSet(stmt);
ByteBuffer nextPage = results.getExecutionInfo().getPagingState();
int remaining = results.getAvailableWithoutFetching(); // gives all the results, even though size is specified as 5

我做错了吗?如果我不是那么应该如何解决这个问题?

【问题讨论】:

    标签: spring-boot datastax-java-driver


    【解决方案1】:

    驱动程序 4 中的语句是不可变的。您需要更改以下几行:

    stmt = stmt.setPageSize(5);
    if (!page.equals("0"))
        stmt = stmt.setPagingState(Bytes.fromHexString(page));
    

    IOW,每个变异方法都会返回一个新实例,因此您需要通过每次重新分配 stmt 变量来捕获它。

    【讨论】:

      猜你喜欢
      • 2019-09-28
      • 2015-08-05
      • 2023-04-03
      • 2014-04-22
      • 2017-06-16
      • 2016-07-31
      • 2020-07-14
      • 2016-12-11
      • 2018-01-18
      相关资源
      最近更新 更多