首页 > cassandra数据库如何更好的实现跳转翻页?

cassandra数据库如何更好的实现跳转翻页?

我在使用Cassandra数据库做分页功能,要实现的是那种能给出页数,例如可以从第1页跳到第3页的翻页方式,而不是仅仅给出“上一页”、“下一页”等功能。

产生这个问题的原因是Cassandra目前还不支持offset偏移量,他的limit只能带一个参数。
用mysql的话我们可以这样写:

select * from table limit 1,10

然而在cassandra中就只能:

select * from table limit 1

由于要跳转至第3页肯定要知道从数据库中取数据的起始地址,所以没有这个特性就很麻烦了。
而且在Cassandra的查询中,因为不支持自增的id,通常要使用token()函数来查询,举例:

select * from table where token(name) > token('test') limit 10

目前我有一个笨拙的解决办法是,记录每一次查询的最后一项的主键,以此为依据去进行下一次查询。同时传入当前页面的页数,当页数不为1时,循环进行查询,以求拿到上一次查询的最后一条结果。
如果是后面页数比较大的情况下,这种方法就要对数据库查询很多次。
翻了stackoverflow和cassandra的文档,好像也没有什么好的解决办法。
在datastax.org网站上倒是提到过cassandra推出的auto paging,可惜对我这种情况好像不太适用。

所以想问大家有没有什么好的办法,更优雅的实现跳转翻页?


cassandra从设计考虑,官方确实是不提供指定页查询的,因为他们觉得这种查询效率低。如果确实有这个需求,官方推荐的做法是:

比方你有20页结果,每页10条,当用户查询指定页比如第12页时,你的fetch size就不要每次只读10条了,可以考虑每次读50条:

  1. 第一次读取1-50

  2. 丢弃,继续读51-100

  3. 丢弃,继续读101-150,取其中的121-130,丢弃其他的

这个50的fetch size你得考虑好,不能太大也不能太小,多试几种找到最佳实践

【热门文章】
【热门文章】