我的应用程序有一个 CouchDB 设置 (CouchDB 2.1.1),它在很大程度上依赖于复制完整性。我们正在使用“每个用户一个 db”的方法,以及一个额外的“角色”db:s 层,如下图所示对用户进行分组。
最近,在增加 Beta 测试人员数量的同时,我们发现一些文档没有按照应有的方式进行复制。我们无法看到文档大小、创建/更新时间、用户或其他方面的任何模式。这些错误似乎偶尔发生,2-3 个成功复制的文档,然后是 4-6 个非复制的文档。
服务器响应{"error":"not_found","reason":"missing"}
这些文档。
大多数(但不是全部)用户文档已复制到相应的角色数据库,但很少有人一直复制到主数据库。这在使用 < 100 个文档进行测试时从未发生过(现在我们在 db 中有 1000-1200 个文档)。
我发现文档的性能章节中提到的“最大打开文件”设置存在问题并修复了它,但未复制的文档仍然没有复制。如果我打开一个文档并保存它,它将复制。
这是我目前的理论:
- 用户上线时复制过程尝试复制新文档
- 由于 Linux 的“max_open_files”达到峰值,写入过程失败
- 主数据库仍然认为复制成功
- 在以后的复制中,主数据库会忽略那些旧文档,只尝试复制新文档
这可能是正确的吗?我能否以某种方式让 CouchDB 服务器“仔细检查”所有文档和以前复制的完整性?
感谢您的时间和任何有用的评论!