web-dev-qa-db-ja.com

PouchDBを使用したモバイルアプリ-CouchDBとMySQL

PHP&MySQLに基づいて、Webベースのアプリケーションと一緒に実行されるCordovaでラップされたモバイルアプリを開発しています。モバイルアプリはローカルストレージを使用し、サービスのレイヤーを介してデータを取得します。モバイルアプリとMySQLデータベース間でデータを交換するために作成されています。モバイルアプリは、メインのMySQLDBに保存されているデータのサブセットのみを使用します。

モバイルアプリのローカルストレージソリューションをポーチDBに置き換えたいと思っていますが、CouchDBが必要であることがわかりました...これにより、推奨可能で実行可能かどうかを確認したい構成/ソリューションの可能性について考えました。 。

メインのMySQLデータベースとモバイルアプリのPouchDBの間のメディエーター/スレーブとして実行されるCouchDBデータベースをセットアップすることは可能でしょうか?モバイルサービスレイヤーはこのデータベース(および必要に応じてメインのMySQL DB)を使用し、メインSQLとcouch-DB間のデータ更新はcronを介して定期的にプッシュされます。 CouchDBは、モバイルアプリに関連するMySQLDBからのデータのサブセットのみを保存します。

この解決策はやり過ぎ/良い考えのように聞こえますか?上記の設定にアプローチするためのより良い方法はありますか?私はpouchdb-CouchDBのアイデアが好きです...しかし、couch-DBを使用するようにWebアプリ全体を書き直したくありませんが、モバイル固有のデータのサブセットを提供する追加レベルの抽象化は役立つようです。

ありがとうトレース

17
trace

Nodeで実行されているPouchDBは、実際には任意のLevelDOWNベースのアダプターを使用でき、MySQL用のアダプターがあります。テストはしていません。詳細はこちら: http:// pouchdb。 com/adapters.html#pouchdb_in_node_js

ただし、PouchDBがMySQLに保存するデータは、アプリが現在MySQLで使用しているデータとはまったく異なるため、これはおそらくユースケースには適していません。レプリケーションをサポートするために、PouchDBは保存されているすべてのドキュメントの改訂履歴を保持します(gitと考えてください)。これは、削除/挿入/更新できるテーブルと行を保存するだけのMySQLのような従来のデータベースとは異なります。 CouchDBやPouchDBのようなデータベースは、レプリケーションをサポートするためにゼロから構築されたため、このバージョン管理システムが存在します。

そうは言っても、MySQLとCouchDBの間に独自の同期レイヤーを作成すると、理論的には機能する可能性がありますが、CouchDBとPouchDBの組み込みレプリケーションの利点を失うほどの作業になる可能性があります。

10
nlawson

ERP(SQL Serverベース)でまったく同じスキーマを実現しようとしています。

今、私はモバイル上のpouchdbが要件に十分であるかどうかを理解しようとしています。たとえば、次のようになります。

  • 特定の「価格表」を「製品の説明」でフィルタリングできるようにするため。次のようにSQLでLIKEを考えてください:

    SELECT * FROM価格WHERE説明LIKE '%text%'

  • 特定の「価格表」を「製品カテゴリ」でフィルタリングできるようにするには、OR "製品ベンダー"で

また、モバイルアプリには完全なSQLスキーマ/データのサブセットが必要です。そして、私のアイデアは、モバイルpouchdb <-> couchdbレプリケーション部分を簡単にすることでした。これは、webSQL <-> SQL Serverだけでは難しい場合があります)、その後、coouchdbに追加されたデータをプロセスを使用してSQLServerに「レプリケーション」します。 cronタスクを考えてください。

これまでのところ私は見つけました:

  • クライアント側でpouchdbビューを構築することは、そのLIKE操作を実行できる最初のポイントのためだけに、構築するのに時間がかかる場合があります。これを解決するために、レプリケーション後に再構築し、ポーチキーを挿入し、オブジェクトテキストフィールドを連結した単純な(pouchdb_id、pouchdb_text)を含む補助websqlデータベースを構築しました。次に、LIKEが必要な場合は、webSQLで実行し、db.allDocs({keys:[sql return keys array]})を使用してpouchdbでドキュメントをフェッチします。

  • 2番目のポイントは今の私の分析です...

分析は現在進行中であり、どんなアイデアでも共有するのがいいでしょう。

1
Javier Castro

次のNodeJSパッケージを使用できます https://www.npmjs.com/package/couchdb-to-mysql

パッケージはCouchDBの変更をリッスンし、MySQLに反映します。

var converter = require('couchdb-to-mysql');
var cvr = converter();
cvr.connect();
cvr.on('created', function (change) {
    // replicate changes on mysql     
});

メソッド

var converter = require('couchdb-to-mysql')
var cvr = converter(config={})
Optionaly pass in a config:

config.couch.Host
config.couch.port
config.couch.database
config.mySQL.Host
config.mySQL.port
config.mySQL.user
config.mySQL.password
config.mySQL.database
events
cvr.on('created', function (change) {})
Every time a document is created, a created event fires.

cvr.on('updated', function (change) {})
Every time a document is updated, a updated event fires.

cvr.on('deleted', function (change) {})
Every time a document is deleted, a deleted event fires.
1
Ano Tisam