Couchdb 跟踪数据库中的复制/更改

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

为了创建一个加载屏幕,我正在尝试跟踪PockDB复制时的更改

我有几个数据库,每个数据库中有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来准确了解需要进行的更改

所以总结一下,我可以看到是否发生了变化,但我看不出如何让应用程序考虑到自己的最新变化。

也许这种方法已经完全过时了?

所以有一点值得注意

   //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?