我的应用程序有一个 CouchDB 设置 (CouchDB 2.1.1),它在很大程度上依赖于复制完整性。我们使用“每个用户一个数据库”方法,并附加一层“角色”db:s,将用户分组,如下图所示。
最近,在增加测试人员数量的同时,我们发现一些文档没有得到应有的复制。我们无法看到文档大小、创建/更新时间、用户或其他方面的任何模式。这些错误似乎偶尔发生,其中有 2-3 个成功复制的文档,然后是 4-6 个未复制的文档。
服务器响应{"error":"not_found","reason":"missing"}
在那些文档上。
大多数(但不是全部)用户文档已复制到相应的角色数据库,但很少有人一直复制到主数据库。当使用
我发现了中提到的“最大打开文件”设置的问题文档中的性能章节 https://docs.couchdb.org/en/latest/maintenance/performance.html#maximum-open-file-descriptors-ulimit并修复了它,但未复制的文档仍然没有复制。如果我打开一个文档并保存它,它就会复制。
这是我目前的理论:
- 当用户上线时,复制过程尝试复制新文档
- 由于 Linux 的“max_open_files”达到峰值,写入过程失败
- 主数据库仍然认为复制成功
- 在稍后的复制中,主数据库会忽略那些旧文档,只尝试复制新文档
这可能是正确的吗?我能否以某种方式让 CouchDB 服务器“双重检查”所有文档以及先前复制的完整性?
感谢您的宝贵时间和任何有用的评论!
我过去经历过类似的事情 - 当尝试在没有足够权限的情况下复制文档时,复制会失败。但是,当权限问题得到解决后,您尝试复制的文档就无法被复制,尽管对文档进行编辑/保存可以解决该问题。我想知道这是因为检查站吗?这CouchDb手册 https://docs.couchdb.org/en/latest/config/replicator.html关于“use_checkpoints”标志的说明:
不建议禁用检查点,因为 CouchDB 会扫描
源数据库的更改从一开始就馈送。
虽然从头开始扫描听起来可能会解决问题,所以禁用检查点也许会有所帮助。我当时从未回到这个问题,所以恐怕这不是一个正确的答案,只是一个建议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)