我为我的应用程序提供了一个CouchDB设置(CouchDB 2.1.1),它在很大程度上依赖于复制完整性。我们正在使用“每个用户一个数据库”的方法,并在“角色”数据库的另一层添加了db:s,将用户分组如下图所示。
最近,在增加Beta测试人员的数量的同时,我们发现某些文档并未得到应有的复制。我们无法看到文档大小,创建/更新时间,用户或其他方面的任何模式。错误似乎偶尔发生,其中2-3个成功复制了文档,然后是4-6个未复制了文档。
服务器在这些文档上回复{"error":"not_found","reason":"missing"}
。
大多数(但不是全部)用户文档已被复制到相应的Role DB,但很少将其复制到Master DB。使用<100个文档进行测试时从未发生过这种情况(现在数据库中有1000-1200个文档)。
我发现Performance chapter in the docs中提到的“最大打开文件数”设置存在问题,并已解决,但是未复制的文档仍然无法复制。如果我打开文档并保存,它将复制。
这是我目前的理论:
这是正确的吗?能否以某种方式使CouchDB服务器“仔细检查”所有文档和以前复制的完整性?
感谢您的时间和任何有益的评论!
答案 0 :(得分:2)
过去,我经历过类似的事情-当尝试在没有足够权限的情况下复制文档时,复制将失败,这是应该做的。但是,解决了权限问题后,尽管对文档进行编辑/保存解决了该问题,但是您无法复制尝试复制的文档。我想知道这是否归因于检查站? CouchDb manual说到“ use_checkpoints”标志:
不建议禁用检查点,因为CouchDB会扫描 源数据库的更改从头开始。
尽管从头开始扫描听起来可能可以解决问题,所以禁用检查点可能会有所帮助。当时我再也没有回到这个问题,所以我担心这不是一个正确的答案,只是一个建议。