Как управлять синхронизацией 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":""
}]
}
все эти сделки выполняется на стороне сервера и результат обновляется в этом документе.когда когда-либо выполнялась какая-либо новая транзакция, я сохраняю ее в документе транзакции в атрибуте данных.
теперь у меня есть 1 транзакция в мешке, и couchdb оба означает, что оба синхронизированы.
теперь, когда мобильное приложение находится в автономном режиме, оно выполняет автономную транзакцию, которая хранится в документе транзакции pouchdb.
и на стороне сервера, что 1 транзакция обновляется до успеха.
теперь, когда приложение я теряю изменения на стороне сервера, и, наконец, данные в transaction doc являются клиентским pouchdb.
Я теряю данные на стороне сервера. так что это хороший подход, или как я могу решить это.1 ответов
происходит то, что у вас есть конфликты с одним и тем же документом, потому что он изменяется одним способом сервером и другим способом клиентом. Одна конфликтующая версия выигрывает произвольно, а другая проигрывает.
вы можете разрешать конфликты или (более разумное решение в вашем случае) хранить несколько документов для одного пользователя вместо одного большого документа.
только потому, что у вас есть одна база данных на пользователя, не означает, что вам нужно иметь один документ на пользователя. :) Например, ваши документы могут быть:
{_id: "Tran_1", status: "Pending"}
{_id: "Tran_2", status: "Pending"}
// etc.
эти документы будут созданы один раз на клиенте, и обновляться на сервере. Никаких конфликтов. Кусок пирога!