2015-05-04 174 views
7

存储多个用户数据的最佳方法是每个用户每个数据库。我正在使用这种相同的方法。如何管理pouchdb和couchdb同步?

我有服务器上的couchdb和移动应用程序的pouchdb。我通过在pouchdb和couchdb中为用户创建单独的数据库来维护每个用户数据。 That.That意味着我在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":"" 
    }] 
} 

所有这些交易,结果在这些document.when更新过任何新的事务执行我将它存储在数据事务文件属性。

现在我有在袋1个交易和CouchDB的两个装置都是同步的。

现在,当移动应用程序处于脱机它执行存储在pouchdb交易文档离线交易。

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

现在,当应用程序进入上线,并同步执行我正在失去在交易文档我的服务器端更改和最终的数据是客户端pouchdb。

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

enter image description here enter image description here

回答

6

发生了什么事是,你必须在同一文件冲突,因为它以一种方式由服务器和客户端的另一种方式修改。一个相冲突的版本是任意获胜,另一个则正在失败。

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

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

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

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

+0

我也知道这种方法,这是最好的,但我有许多文件在用户数据库像交易。所以我应该为每条记录使用单独的文档?以及如何管理多个表格数据?你能解释我吗我对此感到困惑。 –

+0

您可以为每个会话 - 设备组合拥有单独的文档 - 并且每个文档包含多个事务记录,这些事务记录稍后会进行映射缩减以获取最终事务状态。这种方法a)生成较少的文档(数据库中的文档数量影响袋性能); b)产生较少的流量; c)不产生冲突。 – ermouth