问题描述
我有一个使用 CouchDB 作为 DB 的系统,客户端通过 PouchDB 连接,有一个数据库的本地副本供离线使用。该应用没有后端 API,它直接连接到数据库。
系统上的许多数据库包含一个或多个应该是唯一的字段(没有其他文档应该具有相同的值)。由于 CouchDB 并没有真正为字段提供“唯一的约束”,因此文档的唯一性是通过客户端的代码进行管理的。问题来自 PouchDB 的离线同步。
假设系统中有一个 pages
对象,它有两个应该是唯一的字段,name
和 slug
。通过代码我们确保在发布新页面之前,这两个字段在数据库中不存在。然后假设一台 PC 离线一天,并创建了一个带有“主页”的页面,而同一天,一台在线的 PC 创建了另一个带有 slug “主页”的页面" 现在保存在远程数据库中。当 PC 1 上线时,它将同步本地和远程数据库,跳过验证代码并添加第二个“主页”页面。
一种解决方法是将 must-be-unique 字段设置为文档的 _id 并管理同步冲突,但对于多个唯一元素,这是不可能的. (我仍然会感谢仅考虑单个唯一字段的回复)。
此外,在某些情况下,使用 _id 作为唯一字段并不理想。例如,在 POS 系统中,收银员在接受订单时需要使用 pin
进行登记。使用 4 号引脚作为 _id
似乎并不理想。
另一种选择是在注意到冲突时在同步之前询问用户的操作。但这需要一个预同步阶段来检查整个数据库并中断用户。我不确定如何在用户体验方面以无缝方式在系统中实现它。
对于如何处理这个巨大的问题有什么建议吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)