如何管理 pouchdb 和 couchdb 同步?

How to manage pouchdb and couchdb synchronization?

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

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

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

所以在 nosql pouchdb 中我正在为每个 table.

创建文档

我面临的实际问题是:

我在每个数据库中都有一个文档来存储用户的交易记录。

当 he/she 离线时,客户端交易存储在 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每当执行任何新交易时,我都会将其存储在数据属性的交易文档中。

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

现在,当移动应用程序处于离线状态时,它会执行存储在 pouchdb 交易文档中的离线交易。

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

现在,当应用程序联机并执行同步时,我正在丢失我的服务器端更改,最终事务文档中的数据与客户端 pouchdb 相同。

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

发生的情况是您对同一个文档有冲突,因为它被服务器以一种方式修改,而客户端以另一种方式修改。一个冲突的版本是任意赢,一个是输。

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

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

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

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