如何使用Cassandra手动分页导航到上一页

我正在使用Nodejs Cassandra驱动程序,我希望能够检索上一页和下一页。 到目前为止, 文档显示了下一页的检索,它保存了pageState并将其作为parameter passing。 可悲的是,没有关于如何导航到前一页的信息。

正如我所看到的,有两个select:

  • 将每个pageState和page保存为一个键值对,并使用pageState作为要导航到的页面。

  • 将检索到的数据保存到数组中,并使用该数组导航到上一页。 (我不认为这是一个好的解决scheme,因为我将不得不将大块数据存储在内存中。)

这两种方法似乎都不是一个优雅的解决scheme,但如果我必须select,我会使用第一个。

有没有办法使用Nodejs Cassandra驱动程序开箱即用?

另一件事是在文档中通过调用eachRow函数来使用手动分页。 如果我正确地理解它,它会在你从数据库中获得红色后立即给你。 问题是这是在我的API中实现的,我正在返回HTTP响应中当前页面的数据。 所以为了让我这样做,我将不得不推动每一行到自定义数组,然后返回当前页面的数据检索数组。 有没有办法使用手动分页的execute ,因为上面看起来多余?

谢谢


编辑:

这是我的数据模型:

 CREATE TABLE store_customer_report ( store_id uuid, segment_id uuid, report_time timestamp, sharder int, customer_email text, count int static, first_name text, last_name text, PRIMARY KEY ((store_id, segment_id, report_time, sharder), customer_email) ) WITH CLUSTERING ORDER BY (customer_email ASC) 

我正在网格中显示数据,以便用户可以浏览它。 当我写这篇文章的时候,我想到了一个不需要以前的function的方法,但是我认为这是一个有效的例子,如果有一个优雅的解决scheme,这将是非常好的。

有一个选项是“更多”手动,这是常见的寻呼function之前。 您可以将当前正在发送的页面的最后一个分区/集群密钥保存在响应中(可能根据密钥的内容进行encryption,很可能会生成分区密钥,只发送/接收集群密钥以避免安全问题)。 然后,当你做“下一页”的响应,你只需要从那里开始你的CQL查询。 要返回页面,请更改集群键的ORDER BY子句并向后走。 如果你提供你的模式,将会更容易给出例子。 那是所有的pageState真的无论如何。

可悲的是,没有关于如何导航到前一页的信息。

这是正确的,当你做一个查询,并有更多的行,Cassandra返回一个分页状态来获取下一组行,但不是以前的。 虽然分页状态表示的内容被抽象出来,但它通常是指向何处继续读取下一组数据的指针,实际上并不存在读取前一组数据的概念(因为您只是阅读它)。

将每个pageState和page保存为一个键值对,并使用pageState作为要导航到的页面。

这也是我推荐的策略,当然要得到你实际上必须做查询的分页状态。

有没有办法使用Nodejs Cassandra驱动程序开箱即用?

不是,我不知道不幸的是,如果你想回到以前的页面,你将需要跟踪状态。

有没有办法使用手动分页的执行,因为上面看起来多余?

是的,你也可以在options参数中提供pageState和execute,并且将被视为,即:

  client.execute('SELECT * FROM table', [], {pageState: pageState}, function (err, result) { ... });