如何管理pouchdb和couchdb同步?

Bha*_*ala 7 couchdb pouchdb

存储多个用户数据的最佳方法是每个用户每个数据库.我正在使用同样的方法.

我在服务器上有couchdb,移动应用程序有pouchdb.我通过在pouchdb和couchdb中为用户创建单独的数据库来维护每个用户数据.那.这意味着我在couchdb中有多个数据库,在pouchdb中有一个数据库.

通常在sqlbase数据库中,用户数据存储在不同的不同表中.

所以在nosql pouchdb中我正在为每个表创建文档.

我面临的实际问题是:

我在每个数据库中都有一个文档来存储用户的事务.

客户端事务在他/她脱机时以及当应用程序将事务同步到couchdb用户数据库到事务文档时存储在pouchdb中.

数据存储在交易文件中如下

{
  "_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":""
    }]
}
Run Code Online (Sandbox Code Playgroud)

所有这些事务都在服务器端执行,结果在这些文档中更新.当执行任何新事务时,我将其存储在数据属性的事务文档中.

现在我在pouch和couchdb中有1个事务,两者都意味着两个都是同步的.

现在,当移动应用程序处于脱机状态时,它会执行存储在pouchdb事务文档中的脱机事务.

在服务器端,1个事务更新为成功.

现在当应用程序进入联机和同步执行时,我正在丢失我的服务器端更改,最后事务文档中的数据是客户端pouchdb.

在这里我丢失了服务器端数据.那么什么是好方法或如何解决它.

在此输入图像描述 在此输入图像描述

nla*_*son 6

发生的事情是您与同一文档存在冲突,因为它由服务器以一种方式修改,而客户端以另一种方式修改.一个相互冲突的版本是任意获胜,另一个是失败.

您可以解决冲突或(在您的情况下更合理的解决方案)每个用户存储多个文档而不是一个大文档.

仅仅因为每个用户有一个数据库并不意味着每个用户需要一个文档.:)例如你的文档可能是:

{_id: "Tran_1", status: "Pending"}
{_id: "Tran_2", status: "Pending"}
// etc.
Run Code Online (Sandbox Code Playgroud)

这些文档将在客户端上创建一次,并在服务器上更新一次.没有冲突的可能性.小菜一碟!