如何在客户端和服务器之间同步大型列表

Add*_*dev 7 java algorithm android web-services

我想在客户端和服务器之间同步一大堆项目.由于列表非常大,我无法在单个请求中同步它,因此,如何确保列表与同步服务的合理数量的调用同步?

例如:

我希望将列表与100.000项同步,以便我使用以下签名创建Web服务

getItems(int offset,int quantity): Item[]
Run Code Online (Sandbox Code Playgroud)

在呼叫和呼叫之间修改列表时会出现问题.例如:

 getItems(0,100)  : Return items (in the original list) [0,100)
 getItems(100,100): Return items (in the original list) [100,200)
 ##### before the next call the items 0-100 are removed ####
 getItems(200,100): Return items (in the original list) [300,400)
Run Code Online (Sandbox Code Playgroud)

因此永远不会检索项目[200,300].(如果添加项目而不是删除项目,也可以检索重复项目.

如何确保此列表的正确同步?

Ale*_*dov 1

  1. 有时,服务应该保存不可变的快照。接口应该是getItems(long snapshotNumber, int offset,int quantity)

  2. 为了节省时间、空间和流量,并非列表的每次修改都应该形成快照,但每次修改都应该形成日志消息(例如添加项目、删除项目范围),并且应该将日志消息发送到客户端完整快照。接口可以getModification(long snapshotNumber, int modificationNumber):Modification