【发布时间】:2015-05-06 10:19:05
【问题描述】:
我在一个存储项目数据的网络应用程序上工作。数据保存在 couchDb 数据库 A 中。应用使用本地 pouchDb 数据库 B 拉取和推送数据,该数据库与 A 同步。
因此该应用也可以离线工作。当用户恢复连接时,在离线期间对 localDb B 所做的更改将使用经典复制发送到 A。
我在 couchDb 中为每个项目存储 1 个文档,它是一个包含大量数据(项目待办事项、合作者、进展、风险、问题等)的大型 JSON 对象。
它就像一个魅力,但我有一些问题,而且我似乎以错误的方式使用 pouchDb。情况示例:
用户 A 离线,他在项目 1 上添加了一个待办事项。
用户 B 在线,他在项目 1 中添加了一个新的协作者。
自动同步将用户 B 的更改推送到 couchDb。
项目 1 _rev 已递增。
用户 B 从 couchDb 中提取自己的更改,因为该应用会下载检测到的任何 couchDb 更改的所有文档。奇怪......我知道如何防止这种情况。但该应用程序仍然可以正常运行,所以这不是一个大问题。
用户 A 恢复连接。
由于 _rev 较旧,用户 A 的更改被忽略。但是用户对不同的项目属性进行了修改,couchDb 可以检测到自己并与较新的 _rev 合并吗?
我清楚地看到我的问题是每个项目使用 1 个文档。我可以使用数千个文档来存储每个项目的每个属性,而我的问题不会发生,但这似乎很奇怪:要检索项目的所有数据,我会完全扫描我的数据库,检查文档类型(协作者、待办事项、.. .?),并通过向任何文档添加新的 _projectId 属性来检查文档是否链接到项目。
目前我只需要请求一个包含所有项目数据的文档,然后我就可以轻松地操作我的 JSON。处理起来很方便。
如何管理这个?一个项目可能平均包含 10 到 10 000 个属性,多个用户可以在线或离线编辑这些属性。
【问题讨论】:
-
最近有人遇到了类似的问题(他们试图将所有数据塞进一个文档中),我给出的答案可能对您有所帮助:stackoverflow.com/a/30029965/680742
-
谢谢我会检查这个
标签: javascript web-applications couchdb offline pouchdb