如何管理PockDB和couchdb的同步?

如何管理PockDB和couchdb的同步?,couchdb,pouchdb,Couchdb,Pouchdb,存储多用户数据的最佳方法是每个数据库中的每个用户。我正在使用同样的方法 我有服务器上的couchdb和移动应用程序的PockDB。我通过在PockDB和couchdb中为用户创建单独的数据库来维护每个用户数据。这意味着我在couchdb中有多个数据库,在PockDB中有一个数据库 在sqlbase数据库中,用户数据通常存储在不同的表中 所以在nosql数据库中,我为每个表创建文档 我面临的实际问题是: 我在每个数据库中都有一个文档,用于存储用户的事务 当客户离线时,当应用程序与couchdb用户

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

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

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

所以在nosql数据库中,我为每个表创建文档

我面临的实际问题是:

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

当客户离线时,当应用程序与couchdb用户数据库在线事务同步到事务文档时,客户事务存储在PockDB中

数据存储在交易凭证中,如下所示

{
  "_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":""
    }]
}
所有这些事务都在服务器端执行,结果在这些文档中更新。当执行任何新事务时,我将其存储在数据属性中的事务文档中

现在我有一个交易在邮袋和couchdb都意味着两者都是同步的

现在,当移动应用程序脱机时,它将执行存储在PockDB事务文档中的脱机事务

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

现在,当应用程序联机并执行同步时,我将丢失服务器端的更改,最后事务文档中的数据将作为客户端数据库

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


发生的情况是,您对同一文档有冲突,因为服务器和客户端分别以一种方式修改了该文档。一个相互冲突的版本是任意获胜,另一个是失败

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

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

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

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

我也知道这种方法是最好的,但我在用户数据库中有很多文档,比如事务。所以我应该为每个记录使用单独的文档吗?以及如何管理多个表数据?您能解释一下吗?我对此感到困惑。您可以为每个会话设备组合创建单独的文档,每个文档包含多个事务记录,这些记录稍后将映射到简化后以获得最终事务状态。这种方法a)生成的文档较少(数据库中的文档数量影响邮袋性能);b) 产生更少的流量;c) 不会产生冲突。