SQLite データベースを使用してデータをローカルに保存する Adobe AIR アプリケーションを開発しています。いつでも、エンド ユーザーに自分のローカル データを中央の MySQL データベースに同期してもらいたいと考えています。
これを正しく行うためのヒントやアドバイスはありますか?パフォーマンスと安定性が鍵です (セキュリティ以外に ;))
SQLite データベースを使用してデータをローカルに保存する Adobe AIR アプリケーションを開発しています。いつでも、エンド ユーザーに自分のローカル データを中央の MySQL データベースに同期してもらいたいと考えています。
これを正しく行うためのヒントやアドバイスはありますか?パフォーマンスと安定性が鍵です (セキュリティ以外に ;))
私はいくつかの方法を考えることができます:
定期的に、MySQL データベースをダンプし、ダンプから新しい SQLite データベースを作成します。次に、SQLite データベース (SQLite データベースは 1 つのファイルに含まれています) を提供して、ユーザー クライアントが現在のデータベースをダウンロードして置き換えることができます。
現在のデータベースを高速化するために必要なステートメント (さまざまな INSERT、UPDATE、および DELETE ステートメント) を生成する diff スクリプトを作成します。これを行うには、データベースに各変更の時間を継続的に記録する必要があります (各行の作成と更新の時間、および削除された行の履歴を保持します)。ユーザーのクライアントは、差分ファイル (さまざまなステートメントのテキスト ファイル) をダウンロードし、それをローカル データベースに適用します。
どちらのアプローチにもそれぞれ長所と短所があります。データベース全体をダンプすることで、すべてのデータが通過することを確認できます。また、差分を作成するよりもはるかに簡単ですが、ダンプ間でデータベースが更新される頻度によっては、サーバーにより多くの負荷がかかる可能性があります。
一方、データベース間の差分を取ると、変更されたデータだけが得られますが (うまくいけば)、論理エラーが発生しやすくなります。ファイルをコピーするだけでなく、必要なすべてのレコードを作成/更新する必要があるため、クライアントにも追加のオーバーヘッドが発生します。
サーバーからクライアントに同期するだけなら、Eran のソリューションが機能するはずです。
クライアントからサーバーに同期するだけの場合は、逆にします。
両方の方法で同期している場合は、楽しんでください。少なくとも変更ログを保持する必要があり、競合に対処する方法を理解する必要があります。