描述:
这是为了将服务器的数据库同步到具有离线存储的移动应用程序。数据库仅通过服务器更改,所有客户端都应相应地设置其数据。
要求:
如果将新数据添加到服务器插入操作,则应在客户端数据库中执行新数据。如果数据在服务器中更新,具有特定 id 的数据也应该在客户端数据库中更新。如果数据在服务器中被删除,该数据也应该从本地数据库中删除。
要同步的表结构...
服务器数据库的每个表中都有last_date字段和post_status。客户端在表中只有last_date字段。
每当管理员更新现有数据集last_date更改post_id保持不变。
如果管理员从数据库中删除帖子,则post_status处于开启和关闭状态,它将处于关闭状态,否则它将处于开启状态。
过程:
当客户端数据库第一次同步时,服务器数据库中的所有数据集都会按顺序下载。
当离线应用程序必须同步时,它请求服务器仅在最新的 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 个字典项:表示对现有帖子的修改。
现在我想知道最适合此要求的最佳同步算法是什么
问题:
客户应该如何知道更新的项目?检查从服务器返回的每个 post_id 是否已存在于本地数据库中?例如,如果在用户向服务器发送时间戳之后有 1000 条数据添加到服务器,客户端应该比较每个 id 是否存在于本地数据库中,如果在本地数据库中找到 id,则使用服务器提供的新数据更新该数据集.
如果管理员直接从数据库中删除该行而不将其状态设置为 OFF 怎么办?