ローカルデータベース(html5 webstorageを使用)を使用してモバイルWebアプリケーション(iPhoneおよびAndroid用)を開発しているため、ユーザーがオフラインでもアプリを使用できます。
これは完全に機能していますが、ローカルデータをサーバーに保存したいです。したがって、ローカルDBをサーバー上のDBと同期する必要があります。同期は一方向にしかできませんが、将来的には双方向(サーバー<->ローカルDB)で同期したいと思います。
この要件は非常に一般的です(またはモバイルWebアプリでは今後一般的になります)が、それを行うライブラリが見つかりません。
GoogleがモバイルWebアプリ(例:gmail)でそれを行っていることを知っています。そして、 WSPLプロジェクト googleプロジェクトですが、ダウンロードするソースがありません。
解決策が見つからない場合は、同期をとるのが難しくないように、それを行うためのライブラリを作成しますが、他の解決策があるのではないかと思います。
https://github.com/orbitaloop/WebSqlSync
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
このライブラリを使用するには、フレームワークのDataAccessObjectを使用してDBにアクセスする必要があります。 DBに適用されたすべてのSQL要求(もちろんselectを除く)を保存し、それらをサーバーに送信することで機能します。削除を管理するのは素晴らしいことですが、大量の更新があり、サーバーが同じSQL言語を使用する必要がある場合は少し重いです...
http://www.quickconnectfamily.org/qcdbsync/ (すべてのSQL要求の履歴も保存すると思います)
https://github.com/zefhemel/persistencejs
「persistence.jsは非同期Javascriptオブジェクトリレーショナルマッパーライブラリです。サーバー上でもブラウザでも使用できます(また、データモデルをそれらの間で共有できます)。」
DB同期モジュールがあります: DOC of persistence.synch.js
(クライアントではHTML5 DB SQLiteまたはGoogle Gears、サーバーではMySQLで動作します)
http://impel.simulacre.org/api/Impel.inTouch
WebSqlSyncと呼ばれる一般的な同期ソリューションを開発しました。
フレームワークに依存していません。ここにあります: https://github.com/orbitaloop/WebSqlSync
READMEファイルの抽出:
ローカルWebSqlデータベース(ナビゲーターのSQLite)をサーバーに自動的に同期します。 (2方向の同期:クライアント<->サーバー)
既存のアプリへの統合が非常に簡単で使いやすい(2つの関数呼び出し:initSyncとsyncNow)
Libを初期化する必要があります(たとえば、各起動時に)。
自動的に2つのテーブルを作成します(まだ存在していない場合、1つはすべての新規または変更された要素を保存し(テーブルnew_elem)、もう1つは最後の同期の日付を保存します(テーブルsync_info)。同期するテーブルのINSERTまたはUPDATEを監視するため(変更された要素をnew_elemテーブルに自動的に挿入するため):
DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);
TABLES_TO_SYNCは、サーバーと同期するテーブルのリストです(例:
TABLES_TO_SYNC = [
{tableName : 'table1', idName : 'the_id'},
{tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];
同期を開始するには、syncNow関数を呼び出す必要があります。 X秒ごとに呼び出すことも、たとえば次のような変更を加えた後に呼び出すこともできます。
DBSYNC.syncNow(callBackSyncProgress, function(result) {
if (result.syncOK === true) {
//Synchronized successfully
}
});
クライアントで行う必要があるのはそれだけです。サーバー側では、独自のソリューションをコーディングする必要があります(ただし、複雑ではありません)。そして、PHPとJavaにはいくつかの例があります。繰り返しますが、貢献は大歓迎です。