Couchdb 单个文档的数据库复制会导致巨大的内存使用,然后崩溃
我遇到过这样一种情况:live sync拒绝自己获取一些文档,使pookdb.get返回说找不到文档(尽管它在CouchDb中复制) 通过阅读文档,它建议先进行手动复制,然后进行同步。所以我把代码改为第一次复制Couchdb 单个文档的数据库复制会导致巨大的内存使用,然后崩溃,couchdb,pouchdb,Couchdb,Pouchdb,我遇到过这样一种情况:live sync拒绝自己获取一些文档,使pookdb.get返回说找不到文档(尽管它在CouchDb中复制) 通过阅读文档,它建议先进行手动复制,然后进行同步。所以我把代码改为第一次复制 docId='testdoc'; return new Promise(function (resolve, reject) { var toReplicate=[docId]; console.log("replicate new ", toReplicate);
docId='testdoc';
return new Promise(function (resolve, reject) {
var toReplicate=[docId];
console.log("replicate new ", toReplicate);
var quickReplicate = self.db.replicate.from(self.url, {
doc_ids: toReplicate,
// timeout: 100000, //makes no difference
checkpoint: false, //attempt to get around bad checkpoints, but I purged all checkpoints and still have the issue
batch_size: 10, //attempt to get around huge memory usage
batches_limit: 1
}).on('denied', function (err) {
// a document failed to replicate (e.g. due to permissions)
console.log("replicate denied", err);
reject(err);
}).on('complete', function (info) {
// handle complete
console.log("replicate complete", info, toReplicate);
resolve(info);
}).on('error', function (err) {
// handle error
console.log("replicate error", err);
reject(err);
}).on('change', function (change) {
console.log("replicate change", change);
}).on('pause', function (err) {
console.log("replicate pause", err);
});
})
那就去拿医生
return self.db.get(docId).catch(function (err) {
console.error(err);
throw err;
});
此函数被调用多次(平均约8次),每次请求一个文档。它们可能几乎同时运行
为了简化这个过程,我几乎每次使用这个函数时都会注释掉它,每次注释一个,直到我找到了导致问题的确切文档。我将其简化为一个非常简单的命令,直接调用问题文档
db.replicate.from("https://server/db",{
doc_ids:['profile.bf778cd1c7b4e5ea9a3eced7049725a1']
}).then(function(result){
console.log("Done",result);
});
这将永远不会结束,浏览器将迅速耗尽内存并崩溃。
这可能与本问题中的数据库回滚问题有关
当您尝试复制此文档时,上述代码中不会触发任何事件。Chrome/firefox将只是坐在那里,逐渐使用更多的ram和最大化的CPU,然后浏览器在Chrome中崩溃
这是在我们重新创建测试系统后开始的,如下所示:
1:将实时Couchdb复制到测试系统
2:测试Couchdb被修改并领先于实时系统。导致复制冲突
3:删除测试CouchDb,从开始重新运行复制,创建一个新的测试系统
某些文档现在有这个问题,尽管以前从未在PockDB中出现过,而且PockDB应该没有现有的复制检查点,因为数据库是live的新复制。甚至破坏数据库也不起作用。即使移除indexDb包也不能解决这个问题。我不知道还能尝试什么
-编辑,我已经把问题缩小了一点,文档中有大量已删除的冲突修订。它似乎被困在了它们之间。在PockDB GitHub存储库上可能会有所帮助。谢谢,但这是我自己报告的问题。谢谢你引起大家的注意。