Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Couchdb 单个文档的数据库复制会导致巨大的内存使用,然后崩溃_Couchdb_Pouchdb - Fatal编程技术网

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);

我遇到过这样一种情况:live sync拒绝自己获取一些文档,使pookdb.get返回说找不到文档(尽管它在CouchDb中复制)

通过阅读文档,它建议先进行手动复制,然后进行同步。所以我把代码改为第一次复制

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存储库上可能会有所帮助。谢谢,但这是我自己报告的问题。谢谢你引起大家的注意。