如何管理 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.
这些文档将在客户端创建一次,在服务器上更新一次。没有冲突的可能性。小菜一碟!
存储多用户数据的最佳方法是每个用户每个数据库。我正在使用相同的方法。
我在服务器上有 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.
这些文档将在客户端创建一次,在服务器上更新一次。没有冲突的可能性。小菜一碟!