cassandra c# 驱动程序中的向后分页
Backward paging in cassandra c# driver
我们正在尝试使用cassandra 来存储数据库。我们无法在 c# datastax 驱动程序中分页 backward/forward。谁能建议一种在 MVC 项目中对结果进行分页的方法。
您可以使用 C# 驱动程序的 manual paging feature 对来自 Cassandra 的结果进行分页。基本上它是这样工作的:
- 在查询第一页之前,在您要获取第一页的语句中调用
SetAutoPage(false)
和 SetPageSize(pageSize)
。
- Select 第一页来自 Cassandra 的结果。从查询返回的
RowSet
将具有 PagingState
属性。将该分页状态保存在某处(例如,在会话存储或 Cookie 中)
- 稍后,当您想要获取下一页时,从您存储它的位置检索
PagingState
。
- 在查询下一页之前,在语句中调用
SetAutoPage(false)
和 SetPagingState(yourPagingStateFromStorage)
以获取下一页。
- 对后续页面重复步骤 2-4。
棘手的部分是 向后 分页。如果您将分页结果缓存在 UI 中(即,每次单击按钮转到 next/previous 页面时都不会刷新整个页面),这不是问题,因为向后分页实际上只是向后移动您已经查询并缓存的数据(可能在您的 JavaScript 代码中的数组中)。
如果您在每次有人点击以翻阅结果时都进行整页刷新,那么您需要保留所有页面的 PagingState
,直到您确定它们已完成分页(即将多个分页状态值存储在 Session 或 cookie 之类的东西中)。这样,如果有人向后翻页,您只需查找前一页的分页状态标记并在您的查询中使用它。
注意:如果您处于整页刷新情况,您也可以将分页状态作为查询字符串参数传递。例如,使 link 到下一页“/some/page?pagingState=PAGING_STATE_FROM_ROWSET_CURRENTLY_DISPLAYED”,然后向后分页与浏览器的后退按钮做同样的事情。
我们正在尝试使用cassandra 来存储数据库。我们无法在 c# datastax 驱动程序中分页 backward/forward。谁能建议一种在 MVC 项目中对结果进行分页的方法。
您可以使用 C# 驱动程序的 manual paging feature 对来自 Cassandra 的结果进行分页。基本上它是这样工作的:
- 在查询第一页之前,在您要获取第一页的语句中调用
SetAutoPage(false)
和SetPageSize(pageSize)
。 - Select 第一页来自 Cassandra 的结果。从查询返回的
RowSet
将具有PagingState
属性。将该分页状态保存在某处(例如,在会话存储或 Cookie 中) - 稍后,当您想要获取下一页时,从您存储它的位置检索
PagingState
。 - 在查询下一页之前,在语句中调用
SetAutoPage(false)
和SetPagingState(yourPagingStateFromStorage)
以获取下一页。 - 对后续页面重复步骤 2-4。
棘手的部分是 向后 分页。如果您将分页结果缓存在 UI 中(即,每次单击按钮转到 next/previous 页面时都不会刷新整个页面),这不是问题,因为向后分页实际上只是向后移动您已经查询并缓存的数据(可能在您的 JavaScript 代码中的数组中)。
如果您在每次有人点击以翻阅结果时都进行整页刷新,那么您需要保留所有页面的 PagingState
,直到您确定它们已完成分页(即将多个分页状态值存储在 Session 或 cookie 之类的东西中)。这样,如果有人向后翻页,您只需查找前一页的分页状态标记并在您的查询中使用它。
注意:如果您处于整页刷新情况,您也可以将分页状态作为查询字符串参数传递。例如,使 link 到下一页“/some/page?pagingState=PAGING_STATE_FROM_ROWSET_CURRENTLY_DISPLAYED”,然后向后分页与浏览器的后退按钮做同样的事情。