如何管理pouchdb和couchdb同步?

时间:2015-05-04 11:20:02

标签: 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":""
    }]
}

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

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

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

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

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

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

enter image description here enter image description here

1 个答案:

答案 0 :(得分:6)

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

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

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

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

这些文档将在客户端上创建一次,并在服务器上更新一次。没有冲突的可能性。一块蛋糕!