説明:
これは、サーバーのデータベースを、オフライン ストレージを持つモバイル アプリケーションに同期するためのものです。データベースはサーバーを介してのみ変更され、すべてのクライアントはそれに応じてデータを設定する必要があります。
要件:
新しいデータがサーバーに追加された場合、新しいデータとともにクライアント データベースでも挿入操作を実行する必要があります。サーバーでデータが更新された場合、特定の ID を持つデータはクライアント データベースでも更新する必要があります。サーバーでデータが削除された場合、そのデータはローカル データベースからも削除する必要があります。
同期するテーブルの構造...
サーバー データベースのすべてのテーブルには、last_dateフィールドとpost_statusがあります。クライアントのテーブルにはlast_dateフィールドしかありません。
管理者が既存のデータセットを更新するたびに、last_dateが変更され、post_idは変更されません。
post_statusは on と off で、管理者が投稿をデータベースから削除した場合は off ステータスになり、それ以外の場合は on ステータスになります。
プロセス:
クライアント データベースが初めて同期されると、サーバー データベースからすべてのデータセットが順番にダウンロードされます。
オフライン アプリケーションが同期する必要がある場合、最新の 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
}
]
仮定しましょう:
1 番目の辞書項目 :挿入されます。
2 番目の辞書項目:削除します。
3 番目の辞書項目:既存の投稿の変更を表します。
今、この要件に最も適した最適な同期アルゴリズムは何かを知りたい
質問:
クライアントは更新されたアイテムについてどのように知る必要がありますか? サーバーから返された各 post_id がローカル データベースに既に存在するかどうかを確認していますか? たとえば、ユーザーがサーバーに送信したタイムスタンプの後に 1000 個のデータがサーバーに追加された場合、クライアントは各 ID がローカル データベースに存在するかどうかを比較し、ローカル データベースに ID が見つかった場合は、そのデータセットをサーバーから提供された新しいデータで更新する必要があります。 .
行のステータスを OFF に設定せずに、管理者が行をデータベースから直接削除するとどうなりますか?