我想知道如何使用 Cassandra 实现分页。
假设我有一个博客。该博客每页最多列出 10 篇帖子。要访问下一篇文章,用户必须单击分页菜单才能访问第 2 页(第 11-20 篇文章)、第 3 页(第 21-30 篇文章)等。
在 MySQL 下使用 SQL,我可以执行以下操作:
SELECT * FROM posts LIMIT 20,10;
LIMIT 的第一个参数是距结果集开头的偏移量,第二个参数是要获取的行数。上面的示例返回从第 20 行开始的 10 行。
如何在CQL中达到同样的效果?
我在谷歌上找到了一些解决方案,但它们都需要“上次查询的最后结果”。它适用于使用“下一页”按钮来分页到另一个 10 个结果集,但如果我想从第 1 页跳转到第 5 页怎么办?
如果您使用的是 Cassandra 2.0+,则不需要使用令牌。
Cassandra 2.0 具有自动分页功能。
现在它不再是使用令牌函数来创建分页,而是一个内置功能。
现在,开发人员可以迭代整个结果集,而不必关心它的大小是否大于内存。当客户端代码迭代结果时,可以获取一些额外的行,同时删除旧的行。
在 Java 中查看此内容,请注意 SELECT 语句返回所有行,并且检索的行数设置为 100。
我在这里展示了一个简单的语句,但是可以使用准备好的语句加上绑定语句来编写相同的代码。如果不需要,可以禁用自动寻呼。测试各种获取大小设置也很重要,因为您希望保持内存足够小,但又不能太小,以免对数据库进行太多往返。查看this http://datastax.github.io/java-driver/features/paging/博客文章了解分页如何在服务器端工作。
Statement stmt = new SimpleStatement(
"SELECT * FROM raw_weather_data"
+ " WHERE wsid= '725474:99999'"
+ " AND year = 2005 AND month = 6");
stmt.setFetchSize(24);
ResultSet rs = session.execute(stmt);
Iterator<Row> iter = rs.iterator();
while (!rs.isFullyFetched()) {
rs.fetchMoreResults();
Row row = iter.next();
System.out.println(row);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)