1

描述:

这是为了将服务器的数据库同步到具有离线存储的移动应用程序。数据库仅通过服务器更改,所有客户端都应相应地设置其数据。

要求:

如果将新数据添加到服务器插入操作,则应在客户端数据库中执行新数据。如果数据在服务器中更新,具有特定 id 的数据也应该在客户端数据库中更新。如果数据在服务器中被删除,该数据也应该从本地数据库中删除。

要同步的表结构...

服务器数据库的每个表中都有last_date字段和post_status。客户端在表中只有last_date字段。

每当管理员更新现有数据集last_date更改post_id保持不变。

如果管理员从数据库中删除帖子,则post_status处于开启和关闭状态,它将处于关闭状态,否则它将处于开启状态。

过程:

  1. 当客户端数据库第一次同步时,服务器数据库中的所有数据集都会按顺序下载。

  2. 当离线应用程序必须同步时,它请求服务器仅在最新的 last_date 之后向其发送数据。例如:对API 的 get 请求: getdata.php?timestamp=1234。

收到服务器响应后客户端的任务:

服务器响应将是这样的,例如:JSON 格式:

[
{
  " post_id":"10", 
   "data":"Dummy Data",
   post_status: ON,
   last_modified:123124123
},
{
  " post_id":"11", 
   "data":"Dummy Data2",
   post_status: OFF,
   last_modified:5465465654
},
{
  " post_id":"4", 
   "data":"Dummy Data4",
   post_status: ON,
   last_modified:5465465654
}
]

让我们假设:

第一个词典项目:待插入。

词典第 2 项:待删除。

第 3 个字典项:表示对现有帖子的修改。

现在我想知道最适合此要求的最佳同步算法是什么

问题:

  1. 客户应该如何知道更新的项目?检查从服务器返回的每个 post_id 是否已存在于本地数据库中?例如,如果在用户向服务器发送时间戳之后有 1000 条数据添加到服务器,客户端应该比较每个 id 是否存在于本地数据库中,如果在本地数据库中找到 id,则使用服务器提供的新数据更新该数据集.

  2. 如果管理员直接从数据库中删除该行而不将其状态设置为 OFF 怎么办?

4

0 回答 0