【问题标题】:Backward paging in cassandra c# driver [closed]cassandra c#驱动程序中的向后分页[关闭]
【发布时间】:2016-04-29 03:53:57
【问题描述】:

我们正在尝试使用 cassandra 来存储数据库。我们无法在 c# datastax 驱动程序中向后/向前翻页。谁能建议一种方法来在 MVC 项目中对结果进行分页。

【问题讨论】:

    标签: asp.net asp.net-mvc cassandra paging


    【解决方案1】:

    您可以使用 C# 驱动程序的 manual paging feature 对 Cassandra 的结果进行分页。基本上它是这样工作的:

    1. 在查询第一页之前,请在将获取第一页的语句上调用 SetAutoPage(false)SetPageSize(pageSize)
    2. 从 Cassandra 中选择结果的第一页。从查询返回的RowSet 将具有PagingState 属性。将该分页状态保存在某处(例如,在会话存储或 Cookie 中)
    3. 稍后,当您想要获取下一页时,从您存储它的位置检索PagingState
    4. 在查询下一页之前,请在语句上调用SetAutoPage(false)SetPagingState(yourPagingStateFromStorage) 以获取下一页。
    5. 对后续页面重复步骤 2-4。

    棘手的部分是分页向后。如果您在 UI 中缓存分页的结果(即每次单击按钮转到下一个/上一个页面时不进行整页刷新),这不是问题,因为向后分页实际上只是在移动向后浏览您已经查询并缓存的数据(可能在您的 JavaScript 代码中的数组中)。

    如果您在每次有人单击以翻阅结果时都进行整页刷新,那么您需要保留所有页面中的 PagingState,直到您确定它们已完成分页(即存储多个分页会话或 cookie 之类的状态值)。这样,如果有人向后翻页,您只需查找前一页的分页状态标记并在查询中使用它。

    注意:如果您处于全页面刷新情况,您也可以将分页状态作为查询字符串参数传递。例如,创建指向下一页“/some/page?pagingState=PAGING_STATE_FROM_ROWSET_CURRENTLY_DISPLAYED”的链接,然后进行向后分页与浏览器的后退按钮执行相同的操作。

    【讨论】:

    • 卢克,谢谢你的回答。该文件说不要将分页状态暴露给最终用户。我们该如何处理。将尝试实施您的建议
    • 可以将分页状态暴露给最终用户,但请注意,当您从一个版本的 Cassandra 升级到另一个版本时,在旧版本中工作的分页状态可能在新版本中不起作用版本。因此,基本上,您不希望分页状态在某处持续很长时间(即可能跨越升级的状态)。
    猜你喜欢
    • 2020-12-29
    • 2021-07-09
    • 2018-04-24
    • 2017-06-25
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2017-03-28
    相关资源
    最近更新 更多