ローカルのHTML5 DB(WebSQLストレージ、SQLite)をサーバーと同期する最良の方法(2方向同期)[終了]


151

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

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

この要件は非常に一般的であるように見えます(またはモバイルWebアプリでは将来的に一般的になるでしょう)が、それを行うライブラリーを見つけることができません。

私はグーグルが彼らのモバイルウェブアプリ(例えばGmail)でそれをしていることを知っています、そして私はWSPLプロジェクトがグーグルプロジェクトであるのにダウンロードするソースがないことを見つけました。

解決策が見つからない場合は、ライブラリを作成してそれを行います。一方向の同期は難しくないように見えますが、他の解決策はあるのでしょうか。


2
ライブラリがあるかどうかはわかりませんが、これを行う最も簡単な方法は、変更のタイムスタンプを保存し、変更を反対側のレコードよりも新しいレコードに転送し、最後の同期以降の追加と削除も転送することです。ローカルクロックとサーバークロックが同期していないと、気が狂うかもしれませんが、何かを考えることになります。-コメントとして投稿することは、あまり役に立ちませんし、答えも得られないためです。
IvanVučica、2010年

Ivanに感謝します。そうです、ローカルクロックとサーバークロックが同期していない場合、乱雑になる可能性があります...私はそれを見つけました:quickconnect.pbworks.com/Using-Enterprise-Synchronization ローカルHTML 5 DBをサーバー内のDB。私はそれをより深く見て、QuickConnectフレームワークの外で実行できるかどうかを確認する必要があります...
Samuel

別の解決策を見つけました:impel.simulacre.org/blog/…見栄えはいいですが、MootoolsライブラリとImpel ORMを使用する必要があります...
Samuel

1
CouchDBはどうですか?couchdb.apache.org
julianm 2011

4
トピックはディスカッション用、Stack Exchangeは質問用です。ある時点で、このような投稿はStack Exchangeで受け入れられましたが、現在は受け入れられていません。
casperOne 2013年

回答:


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

https://github.com/orbitaloop/WebSqlSync

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

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

このlibを使用するには、フレームワークのDataAccessObjectを使用してDBにアクセスする必要があります。これは、DBに適用されたすべてのSQL要求を保存し(もちろん選択を除く)、サーバーに送信することによって機能します。削除を管理することは素晴らしいことですが、多くの更新があり、サーバーが同じ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/


こんにちはサミュエル、js libはあなたのためにうまくいきましたか?
Mathias Conradt 2010

現在のところ、DB同期は私の優先事項ではないので、あきらめて、より標準的で堅牢なソリューションを待ちます...
Samuel

3
それらすべてをテストした後、WebSQLをサーバーDBと同期させるために、独自の小さなJS libを開発すると思います。これは二重同期(ローカル<->サーバー)であり、依存関係はありません。終了したらコードへのリンクをここに投稿します
Samuel

2
WebSqlSyncという名前の独自の同期ソリューションの最初のバージョンをコミットしました:github.com/orbitaloop/WebSqlSync(回答は以下を参照)
Samuel

1
こんにちは、こんにちは。私は安らかな同期のためのpersistencejsプラグインを開始しました。それはまだ開発中ですが、誰かがそれをチェックアウトしたい場合:github.com/robertokl/persistencejsとruby on railsを使用したサーバー/クライアント側の動作例:github.com/robertokl/persistencejs-restfulSync-example
robertokl

18

WebSqlSyncと呼ばれる一般的な同期ソリューションを開発しました。

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

READMEファイルの抜粋:

WebSqlSync

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

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

使用法

初期化

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

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にいくつかの例があります。繰り返しになりますが、寄付は大歓迎です。


これがどれだけうまく機能し、1年後に要約したと思いますか?ブラウザやモバイルユニットで機能する優れたクライアント側DBを探しています。
Niklas 2013

1
WebSQLSyncは、25を超える本番アプリケーション(iOSおよびAndroid)で非常にうまく機能しています。WebSQLは本当に素晴らしく高速です。iOS、Android、Blackberry(私が思う最新バージョン)、そしてもちろんchromeとsafariで動作しています。APIは、W3Cにより減価償却されているので、しかし、それは...、IEとFirefoxに取り組んでいない
サミュエル・

よし、正と負の両方があります。まとめをありがとう!
Niklas

2
WebSQLではなくlocalStorage以外に同様のものはありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.