Как управлять синхронизацией 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.

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

enter image description hereenter image description here

1 ответов


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

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

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

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

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