说明
这用于将服务器数据库同步到具有脱机存储的移动应用程序。 数据库仅通过服务器进行更改,所有客户端都应相应地设置数据。
要求:
如果将新数据添加到服务器,则应在客户端数据库中执行插入操作以及新数据。 如果在服务器中更新数据,则还应在客户端数据库中更新具有特定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
}
]
我们假设:
第一个词典项目:要插入。
第二个字典项目:要删除。
第3个字典项:表示对现有帖子的修改。
现在我想知道什么是最能满足此要求的最佳同步算法
问题:
客户应该如何了解更新的项目?检查从服务器返回的每个post_id是否已存在于本地数据库中?例如,如果在用户发送到服务器的时间戳之后有1000个数据添加到服务器,则客户端应比较本地数据库中是否存在每个id,如果在本地数据库中找到id,则更新该数据集以及服务器提供的新数据。
如果管理员直接从数据库中删除该行而未将其状态设置为OFF,该怎么办?