2015-05-04 6 views
7

Наилучший подход для хранения нескольких пользовательских данных для каждого пользователя на базу данных. Я использую этот же подход.Как управлять синхронизацией pouchdb и couchdb?

У меня есть couchdb на сервере и pouchdb для мобильного приложения. Я поддерживаю данные каждого пользователя, создавая отдельную базу данных для пользователя в pouchdb и couchdb. Это означает, что у меня есть несколько баз данных в couchdb и одна база данных в pouchdb.

Обычно в базе данных базы данных sqlbase данные хранятся в разных таблицах.

так что в nosql pouchdb я создаю документ для каждой таблицы.

Актуальная проблема я облицовка:

У меня есть один документ, в каждой базе данных, которая хранит транзакцию пользователя.

Клиентская транзакция хранится в pouchdb, когда он находится в автономном режиме, и когда приложение получает синхронизацию транзакции в реальном времени с пользовательской базой данных couchdb в документе транзакции.

данные хранятся в документе операции выглядит следующим образом

{ 
    "_id":"transaction ", 
    "_rev":"1-3e5e140d50bf6a4d873f0c0f3e3deb8c", 
    "data":[ 
    { 
     "transaction_id":"tran_1", 
     "transaction_name":"approve item", 
     "status":"Pending", 
     "ResultMsg":"" 
    }, 
    { 
     "transaction_id":"tran_2", 
     "transaction_name":"approve item", 
     "status":"Pending", 
     "ResultMsg":"" 
    }] 
} 

Все эти транзакции выполняются на стороне сервера и результат обновляется в этих document.when когда любая новая транзакция выполняется я хранить его в документе транзакции в данных атрибут.

Теперь у меня есть 1 транзакция в сумке и couchdb, оба средства находятся в синхронизации.

Теперь, когда мобильное приложение находится в автономном режиме, он выполняет автономную транзакцию, которая хранится в документе pouchdb transaction doc.

и на стороне сервера, что 1 транзакция обновлена ​​для успеха.

Теперь, когда приложение переходит в режим on-line и sync, я теряю свои изменения на стороне сервера, и, наконец, данные в транзакционном doc являются клиентскими pouchdb.

здесь я теряю данные на стороне сервера. так что это хороший подход или как я могу его решить.

enter image description here enter image description here

ответ

6

То, что происходит в том, что у вас есть конфликты с тем же документом, поскольку он модифицируется так сервером и другим способом клиентом. Одна противоречивая версия выигрывает произвольно, а другая проигрывает.

Вы можете либо resolve the conflicts, либо (более разумное решение в вашем случае) хранить несколько документов на пользователя вместо одного большого документа.

Просто потому, что у вас есть одна база данных для каждого пользователя, это не значит, что вам нужен один документ для каждого пользователя. :) Ваши документы например могут быть:

{_id: "Tran_1", status: "Pending"} 
{_id: "Tran_2", status: "Pending"} 
// etc. 

Эти документы будут создаваться сразу на клиенте и обновляется один раз на сервере. Нет возможности конфликтов. Кусок пирога!

+0

Я также знаю об этом подходе, и это лучше всего, но у меня есть много документов в пользовательской базе данных, таких как транзакция.поэтому я должен использовать отдельный документ для каждой записи? и как управлять несколькими табличными данными? Можете ли вы объяснить мне, что я запутался в этом. –

+0

У вас может быть отдельный документ для каждой комбинации сеансового устройства - и каждый doc содержит несколько записей транзакций, которые впоследствии уменьшены на карте, чтобы получить окончательное состояние транзакции. Такой подход: a) генерирует меньше документов (количество документов в DB влияет на производительность Pouch); б) генерирует меньше трафика; c) не создает конфликтов. – ermouth

Смежные вопросы