Cassandra:如何在分页中跳过行?

时间:2016-03-12 13:57:59

标签: cassandra paging nosql

我们可以在不使用分页状态的情况下在Cassandra中使用分页吗?我的意思是,如果我们想要在第一页之后随机访问(跳入)到第3页,我们该怎么办?

1 个答案:

答案 0 :(得分:4)

有一招。

想象一下你有一张桌子

CREATE TABLE (
   partition uuid,
   clustering uuid,
   column1 text,
   ...
   columnN text,
   PRIMARY KEY((partition), clustering)
)

对于包含10行的第一页:

SELECT * FROM table LIMIT 10;

在客户端,保存最后行的分区值,例如第10行行。对于第二页(第11至第20行):

SELECT * FROM table WHERE token(partition) > token('value_of_10th_partition') LIMIT 10;

第三页(第21至第30行):

SELECT * FROM table WHERE token(partition) > token('value_of_20th_partition') LIMIT 10;

这意味着

  1. 第一次,如果您想要第N页,则需要获取之前的所有 N-1 页面< / LI>
  2. 您需要为每个页面保存最后分区值 能够访问下一页。例如,如果要访问 第34页,您需要保存页面的最后分区值 N°33
  3. 此技术保证隔离,例如在里面 同时,如果有新的数据被插入到Cassandra中,那么 可以在页面中添加额外的条目,以便例如页面n°30 插入新数据后,可能不包含相同的行。运用 PagingState对象也没有解决此问题。这是因为 我们不创建每个页面的快照(我们不想这样做 这太贵了)所以没有隔离