我正在移动客户端上构建一个即时消息,通过HTTP请求与RESTful API交互。分页端点非常标准 - 它具有起始位置(偏移)和页面中的项目数(限制)。当数据库可以快速更改时,我无法确定如何确保100%的数据一致性和分页。
例如,有几十个参与者,一秒钟内会话中可能会有十几条新消息。我认为,在HTTP请求分页从服务器返回的时间内,其中一些消息可能会改变数据库,这一点并不遥远。幸运的是,由于这是一个信使,我不必考虑数据删除的可能性,只考虑数据添加。
在我的研究中,以下两个链接非常有用,但没有提供明确的解决方案:
How to ensure data integrity in paginated REST API?
How to implement robust pagination with a RESTful API when the resultset can change?
我能想到的唯一可能的解决方案是使用先前获取的页面中最后一个对象的时间戳。因此HTTP查询将时间戳作为参数,服务器将返回在该时间戳之后创建的对象页面。
是否有任何潜在的问题我没有看到,甚至更好,这个问题是一个更好的解决方案?
答案 0 :(得分:0)
似乎我想到的方法有一个名称 - 基于光标的分页。
下面的链接有一个很棒的图形描述和解释,以及php中的一个例子。
http://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/
Django Framework还提供了一个有用的指南,可以比较两种不同的分页技术(LimitOffsetPagination和CursorPagination)。
http://www.django-rest-framework.org/api-guide/pagination/
基于游标的分页需要一个独特的,不变的项目排序。 Facebook和Twitter使用一些生成的ID。至于我,我决定只在对象创建时使用时间戳,因为它支持高达毫秒的精度。那应该足够好了。