Мобильное приложение с использованием PouchDB-CouchDB и MySQL

Я разрабатываю мобильное приложение, завернутое в Кордову, которое работает вместе с нашим веб-приложением на основе PHP и MySQL. Мобильное приложение использует локальное хранилище и получает данные через слой служб, которые были записаны для обмена данными между мобильным приложением и базой данных MySQL. Мобильное приложение использует только подмножество данных, хранящихся в главном БД MySQL.

Я хочу заменить свое решение для локального хранения мобильных приложений с помощью пакета DB и посмотреть, что для этого требуется CouchDB..., который заставил меня подумать о потенциальной конфигурации/решении, которое я хотел бы выяснить, было бы целесообразным и возможно...

Можно ли создать базу данных CouchDB, которая работает как посредник/ведомый между основной базой MySQL и мобильным приложением PouchDB? Уровень подвижной службы будет использовать эту базу данных (а также, если необходимо, основную базу данных MySQL), а обновления данных между основным SQL и couch-DB будут периодически передаваться через cron. CouchDB будет хранить только подмножество данных из базы данных MySQL, которая имеет отношение к мобильному приложению.

Является ли это решение похожим на overkill/хорошая идея? Есть ли лучший способ приблизиться к описанной выше настройке? Мне нравится идея pouchdb-CouchDB... но не хочу переписывать все мое веб-приложение для использования couch-DB, в то время как дополнительный уровень абстракции, предоставляющий подмножество данных, специфичных для мобильных устройств, кажется полезным.

Спасибо Трассировка

Ответ 1

PouchDB, работающий на Node, может фактически использовать любой адаптер на основе LevelDOWN, а для MySQL - один. Я его не тестировал. Подробнее здесь: http://pouchdb.com/adapters.html#pouchdb_in_node_js.

Однако это, вероятно, не подходит для вашего случая использования, поскольку данные, которые PouchDB будет хранить в MySQL, будут полностью отличаться от данных, которые в настоящее время используется вашим приложением в MySQL. Чтобы поддерживать репликацию, PouchDB сохраняет историю изменений каждого сохраненного документа (думаю, git), который отличается от традиционной базы данных, такой как MySQL, которая просто хранит таблицы и строки, которые могут быть удалены/вставлены/обновлены. Базы данных, такие как CouchDB и PouchDB, были созданы с нуля для поддержки репликации, поэтому система управления версиями существует.

Если вы напишете свой собственный уровень синхронизации между MySQL и CouchDB, он может работать теоретически, но, вероятно, это будет так много работы, что вы потеряете преимущества встроенной репликации CouchDB и PouchDB.

Ответ 2

Я пытаюсь достичь той же схемы с нашей ERP (на основе SQL Server).

Теперь я просто пытаюсь выяснить, достаточно ли пакета pouchdb для мобильных устройств для требований, например:

  • Чтобы иметь возможность фильтровать данный "прейскурант" по "описанию продукта". Подумайте LIKE в sql как:

    SELECT * FROM Цены WHERE Описание LIKE '% text%'

  • Чтобы иметь возможность фильтровать данный "прейскурант" по "категории продукта", ИЛИ "поставщиком продукта"

Кроме того, мобильному приложению просто потребуется подмножество полной схемы/данных SQL. И моя идея состояла в том, чтобы упростить часть репликации мобильных pouchdb ↔ couchdb, которая может быть сложной только с помощью webSQL ↔ SQL Server), а затем позже "реплицировать" добавленные данные на coouchdb на SQL Server с помощью процесс, подумайте о задаче cron.

До сих пор я нашел:

  • Построение представления pouchdb на стороне клиента может занять возраст для сборки, только для первого момента, когда он сможет выполнить эту операцию LIKE. Чтобы решить эту проблему, я создал auxiliar websql db, который просто содержит (pouchdb_id, pouchdb_text), где я перестраиваю его после репликации, вставляя ключи пакета и контектированные текстовые поля объектов. Затем, когда мне нужен LIKE, я делаю это на webSQL и извлекаю документы с помощью pouchdb с помощью db.allDocs({keys: [sql return keys array]})

  • Второй момент касается моего анализа прямо сейчас...

Анализ в настоящее время продолжается, и любая идея будет приятной для обмена.

Ответ 3

Вы можете использовать следующий пакет 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.