Couchdb 跟踪数据库中的复制/更改
为了创建一个加载屏幕,我正在尝试跟踪PockDB复制时的更改 我有几个数据库,每个数据库中有2000个左右的文档,初始加载需要相当长的时间,因此我希望应用程序能够向用户指示后台正在发生的事情Couchdb 跟踪数据库中的复制/更改,couchdb,replication,pouchdb,Couchdb,Replication,Pouchdb,为了创建一个加载屏幕,我正在尝试跟踪PockDB复制时的更改 我有几个数据库,每个数据库中有2000个左右的文档,初始加载需要相当长的时间,因此我希望应用程序能够向用户指示后台正在发生的事情 //define vars var nameDB = "location"; var remoteDB = new PouchDB("http://localhost:5984/" + nameDB); var localDB = new PouchDB(nameDB); var loc
//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来准确了解需要进行的更改
所以总结一下,我可以看到是否发生了变化,但我看不出如何让应用程序考虑到自己的最新变化。
也许这种方法已经完全过时了?所以有一点值得注意
//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\u seq
不能用作文档数量的代理,它是从何处复制的标记,可能与文档写入一致,也可能与文档写入不一致,但是考虑到复制两侧的doc\u count
,并且docs\u writed
似乎您有一个相当准确的计数器
哦,我只是更多地阅读了你的代码,你不需要调用更改,replicate有一个onChange
,有了更多信息,我们可能想让它更自动化,这是一个相当常见的请求
对于第一次加载之后的请求,您的UI似乎只需要一次非常小的更改,除非您以非常慢的复制速度进行大批量写入。目前这只适用于初始同步,我可以准确跟踪第一次加载的文档。我也根据你的建议更新了我的代码,谢谢。但是,如果我想更进一步,尝试跟踪具有新修订版本的文档的复制,api是否会公开类似的内容?有什么好方法可以尝试和实现这样的内容?据我所知,DockDB replication会批量检查服务器是否有更新的修订,然后处理更改并将处理过的文档数添加到编写的文档中?因此没有checkServerDifference()==TotalOcalDocumentsToUpdateCount?