Datastax Cassandra Java Driver 4 分页问题
Datastax Cassandra Java Driver 4 paging problem
我需要以分页方式从我的 cassandra 数据库 table 中获取结果。我正在使用 spring 引导版本 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
我是不是做错了什么?如果我不是那么应该如何解决这个问题?
驱动程序 4 中的语句是不可变的。您需要更改以下行:
stmt = stmt.setPageSize(5);
if (!page.equals("0"))
stmt = stmt.setPagingState(Bytes.fromHexString(page));
IOW,每个变异方法 returns 一个新实例,因此您需要通过每次重新分配 stmt
变量来捕获它。
我需要以分页方式从我的 cassandra 数据库 table 中获取结果。我正在使用 spring 引导版本 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
我是不是做错了什么?如果我不是那么应该如何解决这个问题?
驱动程序 4 中的语句是不可变的。您需要更改以下行:
stmt = stmt.setPageSize(5);
if (!page.equals("0"))
stmt = stmt.setPagingState(Bytes.fromHexString(page));
IOW,每个变异方法 returns 一个新实例,因此您需要通过每次重新分配 stmt
变量来捕获它。