Couchdb Cloudant复制会跳过一些文档
我正在将数据从一个Cloudant实例移动到另一个实例。作为移动数据的好方法,我创建了用于连续复制的复制文档。它们中的大多数复制了所有文档(正如预期的那样,因为我没有使用任何过滤器),但有些跳过了几个文档 有问题的两个数据库都只存储新文档(没有更新,没有删除)。在调查了较大的数据库(超过3000万个文档)之后,我注意到只有在特定日期之后创建的文档才会被跳过。自该日期起的大多数日子都会错过大约1/3的已创建文档。 我偶尔会注意到复制文档中的错误,这些错误通常会很快再次消失,并且状态会切换回“已触发”Couchdb Cloudant复制会跳过一些文档,couchdb,database-replication,cloudant,Couchdb,Database Replication,Cloudant,我正在将数据从一个Cloudant实例移动到另一个实例。作为移动数据的好方法,我创建了用于连续复制的复制文档。它们中的大多数复制了所有文档(正如预期的那样,因为我没有使用任何过滤器),但有些跳过了几个文档 有问题的两个数据库都只存储新文档(没有更新,没有删除)。在调查了较大的数据库(超过3000万个文档)之后,我注意到只有在特定日期之后创建的文档才会被跳过。自该日期起的大多数日子都会错过大约1/3的已创建文档。 我偶尔会注意到复制文档中的错误,这些错误通常会很快再次消失,并且状态会切换回“已触发
工人死亡
错误消息报告为{[{,},{,}]}
。
源数据库没有问题的迹象
如何解决此问题?听起来您正在从一个旧的、专用的或计量的Cloudant帐户复制到IBM Bluemix Public上的一个新实例。在较旧的实例上,最大请求大小为64M,而在较新的实例上,此限制减少到1M。这种差异很可能就是问题所在 在复制过程中,将文档写入源时会对其进行批处理。如果您的文档本身小于1M,您应该能够调整批量大小,以压缩到1M请求限制大小以下。批次大小默认为500,但可以使用
worker\u batch\u size
参数进行更改;看
如果你的一些文档大于1米,那么你就不走运了。谢谢,xpqz,你把我引向了正确的方向。 仅减少worker\u batch\u大小并不能解决问题,因为我们有一些大于1MB的文档。 在添加另一个过滤器以跳过所有大于1MB的文档后,所有较小的文档都被复制。 不幸的是,Cloudant不会跳过较大的文档并继续前进,但它会一次又一次地尝试复制同一个较大的文档,因此以后将永远不会复制所有文档
- 使用大小筛选器创建dd: “筛选器”:{“doc\u size”:“函数(doc,req){\r\n if(JSON.stringify(doc).length>1048575){\r\n返回false;\r\n}\r\n返回true;\r\n}”
- 将筛选器添加到复制文档: “过滤器”:“/文档大小”
worker\u batch\u size=1启动了另一个复制。它可能会运行几天,但如果结果是正确的,我可以接受。请随意接受答案,这样它可以帮助其他人。谢谢