2

我的应用程序有一个 CouchDB 设置 (CouchDB 2.1.1),它在很大程度上依赖于复制完整性。我们正在使用“每个用户一个 db”的方法,以及一个额外的“角色”db:s 层,如下图所示对用户进行分组。

最近,在增加 Beta 测试人员数量的同时,我们发现一些文档没有按照应有的方式进行复制。我们无法看到文档大小、创建/更新时间、用户或其他方面的任何模式。这些错误似乎偶尔发生,2-3 个成功复制的文档,然后是 4-6 个非复制的文档。

服务器响应{"error":"not_found","reason":"missing"}这些文档。

大多数(但不是全部)用户文档已复制到相应的角色数据库,但很少有人一直复制到主数据库。这在使用 < 100 个文档进行测试时从未发生过(现在我们在 db 中有 1000-1200 个文档)。

我发现文档的性能章节中提到的“最大打开文件”设置存在问题并修复了它,但未复制的文档仍然没有复制。如果我打开一个文档并保存它,它将复制。

这是我目前的理论:

  1. 用户上线时复制过程尝试复制新文档
  2. 由于 Linux 的“max_open_files”达到峰值,写入过程失败
  3. 主数据库仍然认为复制成功
  4. 在以后的复制中,主数据库会忽略那些旧文档,只尝试复制新文档

这可能是正确的吗?我能否以某种方式让 CouchDB 服务器“仔细检查”所有文档和以前复制的完整性?

感谢您的时间和任何有用的评论!

沙发复制模式

4

1 回答 1

3

我过去经历过类似的事情 - 当尝试在没有足够权限的情况下复制文档时,复制会失败,因为它应该这样做。但是,当权限问题得到解决时,您尝试复制的文档将无法被复制,尽管对文档进行编辑/保存可以解决问题。我想知道这是不是因为检查站?CouchDb手册中提到了“use_checkpoints”标志:

不建议禁用检查点,因为 CouchDB 将从一开始就扫描源数据库的更改提要。

虽然从头开始扫描听起来可能会解决问题,但禁用检查点可能会有所帮助。当时我再也没有回到那个问题上,所以我担心这不是一个正确的答案,只是一个建议。

于 2019-02-08T16:15:58.590 回答