Couchdb Cloudant复制会跳过一些文档

Couchdb Cloudant复制会跳过一些文档,couchdb,database-replication,cloudant,Couchdb,Database Replication,Cloudant,我正在将数据从一个Cloudant实例移动到另一个实例。作为移动数据的好方法,我创建了用于连续复制的复制文档。它们中的大多数复制了所有文档(正如预期的那样,因为我没有使用任何过滤器),但有些跳过了几个文档 有问题的两个数据库都只存储新文档(没有更新,没有删除)。在调查了较大的数据库(超过3000万个文档)之后,我注意到只有在特定日期之后创建的文档才会被跳过。自该日期起的大多数日子都会错过大约1/3的已创建文档。 我偶尔会注意到复制文档中的错误,这些错误通常会很快再次消失,并且状态会切换回“已触发

我正在将数据从一个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}”

  • 将筛选器添加到复制文档:

    “过滤器”:“/文档大小”


谢谢您的回复。我没有意识到专用Cloudant实例会使用不同的批处理大小。我用
worker\u batch\u size=1启动了另一个复制。它可能会运行几天,但如果结果是正确的,我可以接受。请随意接受答案,这样它可以帮助其他人。谢谢