gpt4 book ai didi

couchdb - 跟踪 pouchdb 中的复制/更改

转载 作者:行者123 更新时间:2023-12-03 03:36:38 28 4
gpt4 key购买 nike

我正在尝试跟踪 pouchdb 复制时的更改以创建加载屏幕。

我有几个数据库,每个数据库都有 2000 个左右的文档,初始加载需要相当长的时间,因此我希望应用程序向用户指示后台发生的情况。

  //define vars
var nameDB = "location";
var remoteDB = new PouchDB("http://localhost:5984/" + nameDB);
var localDB = new PouchDB(nameDB);
var localdocCount;
var localdocCounter = 0;
var remotedocCount;

//wrap replication in reusable function
function replicate(){
//replicate TO the server
PouchDB.replicate(localDB,remoteDB, {
continuous: false,
attachments: true
},
function(){

//on callback replicate FROM server
PouchDB.replicate(remoteDB,localDB, {
continuous: false,
attachments: true
},
function(){
//replicate FROM complete
);
});

//compact local database to keep size down
//all revisions are replicated to the server
//no need to keep them locally
localDB.compact();
}

//get the remote db info first and see how many documents it has
//remote update_seq how does it match up to localdb update_seq?
remoteDB.info(function(err, info) {
remotedocCount = info.doc_count;
console.log(info);
});

//get info for local db for comparison with remote
localDB.info(function(err, info) {

localdocCount = info.doc_count;

//Actually run the replication now that we have the
//remote and local db info
replicate();

//track any changes to the localdb
localDB.changes({
continuous: true,
onChange: function(){

//change detected increment counter
localdocCounter++;

console.log("Downloaded "
+ (localdocCount + localdocCounter)
+ " of " + remotedocCount + " to " + nameDB);

//localdocCount === The total Documents in the local database
//localdocCounter === The changes that have been made since
//remotedocCount === The amount of documents we need


}

});
});

上面的代码是我尝试跟踪从服务器下载到客户端的文档量。

上面的代码有效,我可以看到文档正在下载。

但是,这仅适用于首次加载场景,那么当用户更新文档时呢?

我认为这就是 update_seq 发挥作用的地方。

但我不知道如何使用 update_seq 来准确了解需要发生的更改。

总而言之,我可以看到是否正在发生更改,但我看不到如何获取应用程序认为自己是最新的所需的更改总量。

也许这种方法完全不对劲?

最佳答案

有一点值得注意

   //on callback replicate FROM server
PouchDB.replicate(remoteDB,localDB, {
continuous: false,
attachments: true
},
function(){
//replicate FROM complete
);

已弃用,取而代之的是

   //on callback replicate FROM server
PouchDB.replicate(remoteDB,localDB, {
continuous: false,
attachments: true,
complete: function() {
//replicate FROM complete
}
});

update_seq 不能用作文档数量的代理,它是从何处复制的标记,可能与文档写入一致,也可能不一致,但是考虑到 doc_count 在复制的两侧,并且 docs_writing 看起来你有一个相当准确的计数器?

哦,我只是更多地阅读您的代码,您不需要调用更改,复制有一个包含更多信息的 onChange ,我们可能希望研究使其更加自动化,它是一个相当共同请求

对于首次加载之后的请求,似乎您的 UI 只期望进行一次非常小的更改,除非您以非常慢的复制速度进行大批量写入。

关于couchdb - 跟踪 pouchdb 中的复制/更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195802/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com