mysql mobile couchdb pouchdb

Aplicación móvil usando PouchDB-CouchDB y MySQL



ionic pouchdb couchdb (3)

PouchDB que se ejecuta en Node realmente puede usar cualquier adaptador LevelDOWN, y hay uno para MySQL. No lo he probado. Más información aquí: http://pouchdb.com/adapters.html#pouchdb_in_node_js .

Sin embargo, esto probablemente no sea una buena opción para su caso de uso, porque los datos que PouchDB almacenará en MySQL serán totalmente diferentes de los datos que su aplicación utiliza actualmente en MySQL. Para admitir la replicación, PouchDB mantiene el historial de revisión de cada documento almacenado (think git), que es diferente de una base de datos tradicional como MySQL, que simplemente almacena tablas y filas que se pueden eliminar / insertar / actualizar. Las bases de datos como CouchDB y PouchDB se construyeron desde cero para admitir la replicación, por lo que este sistema de versiones existe.

Dicho esto, si escribe su propia capa de sincronización entre MySQL y CouchDB podría funcionar en teoría, pero probablemente sería tanto trabajo que perdería los beneficios de la replicación integrada de CouchDB y PouchDB.

Estoy desarrollando una aplicación móvil envuelta en Cordova que funciona junto con nuestra aplicación basada en web, basada en PHP y MySQL. La aplicación móvil utiliza almacenamiento local y obtiene datos a través de una capa de servicios que se han escrito para intercambiar datos entre la aplicación móvil y la base de datos MySQL. La aplicación móvil solo usa un subconjunto de datos almacenados en el DB MySQL principal.

Estoy buscando reemplazar mi solución de almacenamiento local de aplicación móvil con la bolsa DB y ver que requiere CouchDB ... lo que me hizo pensar en una posible configuración / solución que me gustaría saber si sería aconsejable y factible. .

¿Sería factible configurar una base de datos CouchDB que se ejecute como un mediador / esclavo entre la base de datos principal MySQL y PouchDB de la aplicación móvil? La capa de servicio móvil usaría esta base de datos (así como también la Base de datos MySQL principal, si es necesario) y las actualizaciones de datos entre la base de datos SQL y la base de datos en sofá se realizarán periódicamente a través de cron. El CouchDB solo almacenaría un subconjunto de datos del DB de MySQL que sea relevante para la aplicación móvil.

¿Suena esta solución demasiado excesiva / una buena idea? ¿Hay una mejor manera de abordar la configuración descrita anteriormente? Me gusta la idea de pouchdb-CouchDB ... pero no quiero volver a escribir toda mi aplicación web para usar couch-DB, mientras que un nivel adicional de abstracción que proporciona un subconjunto de datos específicos para móviles parece útil.

Gracias Trace


Estoy tratando de lograr el mismo esquema con nuestro ERP (basado en SQL Server).

Ahora solo estoy tratando de averiguar si pouchdb en el móvil sería suficiente para los requisitos, por ejemplo:

  • Para poder filtrar una "lista de precios" dada por "descripción del producto". Piense un LIKE en sql como en:

    SELECCIONAR * DE PRECIOS DONDE Descripción LIKE ''% text%''

  • Para poder filtrar una "lista de precios" dada por "categoría de producto", O por "proveedor de productos"

Además, la aplicación móvil solo necesitaría un subconjunto del esquema / datos completos de SQL. Y mi idea era facilitar la parte móvil de la replicación pouchdb <-> couchdb, que puede ser un desafío solo con webSQL <-> SQL Server), y luego "replicar" los datos agregados en coouchdb al SQL Server con un proceso, pensar en una tarea cron.

Hasta ahora he encontrado:

  • Crear una vista de bolsa en el lado del cliente puede tardar años en construirse, solo para el primer punto de poder hacer esa operación LIKE. Para resolver esto, he creado un auxiliar websql db que simplemente contiene (pouchdb_id, pouchdb_text) donde lo reconstruyo después de la replicación, insertando las claves de la bolsa y los campos de texto del objeto concatenados. Entonces, cuando necesito un LIKE, lo hago en webSQL, y obtengo documentos con pouchdb usando db.allDocs ({keys: [sql returned keys array]})

  • El segundo punto está en mi análisis en este momento ...

El análisis está actualmente en curso, y cualquier idea sería agradable de compartir.


Puede usar el siguiente paquete NodeJS https://www.npmjs.com/package/couchdb-to-mysql .

El paquete escucha los cambios de CouchDB y los refleja en MySQL.

Ejemplo

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

Métodos

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.