153

ユーザーがオフラインのときでもアプリを使用できるように、ローカル データベース (html5 webstorage を使用) を使用してモバイル Web アプリケーション (iPhone および Android 用) を開発しています。

これは完全に機能していますが、ローカル データをサーバーに保存したいと考えています。そのため、ローカル DB をサーバー上の DB と同期する必要があります。同期は片方向のみですが、将来的には双方向(サーバー⇔ローカルDB)で同期したいと考えています。

この要件は非常に一般的 (または将来のモバイル Web アプリでは一般的) に見えますが、それを行うライブラリが見つかりません。

Google がモバイル Web アプリ (gmail など) でそれを行っていることは知っていますが、WSPL プロジェクトは Google プロジェクトですが、ダウンロードするソースがないことがわかりました。

解決策が見つからない場合は、そのためのライブラリを作成します。一方通行の同期は難しくないように見えますが、他の解決策があるかどうか疑問に思います。

4

2 に答える 2

70
  • ローカル WebSql DB をサーバー (クライアント <-> サーバー) と同期するために、WebSqlSyncという名前の小さな JS ライブラリを作成しました。非常に使いやすく、コードに統合するのは簡単です:

https://github.com/orbitaloop/WebSqlSync

  • オープン ソース プロジェクトのQuickConnectには、ローカル HTML5 SQLite DB をサーバー DB (MySQL またはその他) に同期するための JS ライブラリが含まれています。

http://quickconnect.pbworks.com/Using-Enterprise-Synchronization

このライブラリを使用するには、フレームワークの DataAccessObject を使用して DB にアクセスする必要があります。DBに適用されたすべてのSQLリクエスト(もちろんselectを除く)を保存し、サーバーに送信することで機能します。削除を管理するのは素晴らしいことですが、多くの更新があり、サーバーが同じ SQL 言語を使用する必要がある場合は少し重くなります...

  • QuickConnectの別のプロジェクトは、ネイティブ SQLite 同期です (iOS または Mac OS の場合は Objective C、Android の場合は Java):

http://www.quickconnectfamily.org/qcdbsync/ (すべての SQL リクエストの履歴も保存されていると思います)

  • そして、私は別の有望なJSライブラリを見つけました:persistenceJS

https://github.com/zefhemel/persistencejs

「persistence.js は、非同期の Javascript オブジェクト リレーショナル マッパー ライブラリです。ブラウザだけでなく、サーバーでも使用できます (そして、それらの間でデータ モデルを共有できます)。」

DB 同期モジュールがあります: persistence.synch.js の DOC

(クライアントでは HTML5 DB SQLite または Google Gears、サーバーでは MySQL で動作します)

  • そしてImpel.inTouchもあります。使い方は非常に簡単に見えますが (php ファイルが含まれています)、クライアント側で Mootools フレームワークを使用する必要があります。

http://impel.simulacre.org/api/Impel.inTouch

  • Sencha には同期サービスSencha.ioもあります。見栄えは良いですが、Sencha Touch フレームワークに依存しています:

http://www.sencha.com/products/io/

于 2010-02-22T20:32:02.883 に答える
18

WebSqlSyncという一般的な同期ソリューションを開発しました。

どのフレームワークにも依存しません。ここから入手できます: https://github.com/orbitaloop/WebSqlSync

README ファイルの抜粋:

WebSqlSync

ローカル WebSql データベース (ナビゲーターの SQLite) をサーバーに自動的に同期します。(双方向同期: クライアント <-> サーバー)

既存のアプリへの統合が非常に簡単で、非常に使いやすい (2 つの関数を呼び出す: initSync と syncNow)

使用法

初期化する

ライブラリを初期化する必要があります(たとえば、起動ごとに)。

2 つのテーブルが自動的に作成されます (まだ存在しない場合、1 つはすべての新しい要素または変更された要素を格納するため (テーブル new_elem)、もう 1 つは最後の同期の日付を格納するため (テーブル sync_info) です。また、SQLite トリガーも作成します。同期するテーブルの 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 にはいくつかの例があります。繰り返しますが、貢献は大歓迎です。

于 2012-02-02T14:54:55.387 に答える