【发布时间】:2016-11-12 07:49:30
【问题描述】:
我想在 UI 上实现分页,所以我这样设置 fetchSize:
boundStatement.setFetchSize(20)
但是 setFetchSize() 不被接受。截至目前,我的表有 400 行,并且检索了所有 400 行。当我使用
检索下一组行时rs.getExecutionInfo().getPagingState();
然后检索接下来的 380 行。所以分页状态是正确设置和检索的,但是为什么驱动程序从表中检索所有 400 行,我怎样才能避免这种情况或让它只检索 400
部分代码:
....
....
// "SELECT * FROM abc.sometable"
BoundStatement boundStatement = pStmt.bind();
boundStatement.setFetchSize(20);
if (pagingState != null) {
boundStatement.setPagingState(PagingState.fromString(pagingState));
}
ResultSet rs = session.execute(boundStatement);
PagingState nextPage = rs.getExecutionInfo().getPagingState();
int remaining = rs.getAvailableWithoutFetching();
List<?> list = new ArrayList<>();
for (Row row : rs) {
list.add(getValidObjectFromRow(row));
}
....
Cassandra 版本 - 3.7 和 cassandra 驱动程序版本 - 3.1.0
谢谢!
【问题讨论】:
-
您是如何使用 ResultSet 的?驱动程序可能会在幕后分页接下来的 20 行(等等)。
-
如果你使用wireshark,你可以查看查询/结果,看看它是否实际获取了20个块。如果需要更多控制,您可能只想将
LIMIT 20添加到您的查询和手动页面 -
用代码块更新问题。
-
你用的是什么版本的cassandra?
-
我正在使用 Cassandra 版本 - 3.7 和 cassandra 驱动程序版本 - 3.1.0
标签: java cassandra datastax-java-driver