2014-03-05 4 views
2

로딩 화면을 만들기 위해 pouchdb가 복제 할 때 변경 사항을 추적하려고합니다.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를 사용하여 수행해야하는 변경 사항을 정확하게 파악하는 방법을 알아낼 수 없습니다.

요약하면 변경 사항이 발생하는지 확인할 수는 있지만 응용 프로그램이 최신 상태로 유지되는 데 필요한 총 변경 내용을 얻는 방법을 알 수 없습니다.

어쩌면이 접근법은 완전히 해제 되었습니까?

답변

0

은 그래서 참고

//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_written은 상당히 정확한 카운터를 가지고있는 것처럼 보입니다.

아, 그리고 난 그냥 자세한 내용과 onChange을 가지고 복제, 변경 사항을 호출 할 필요는 없습니다 코드를 더 읽기, 우리는 매우 일반적인 요청, 즉 더 자동 만들기로보고 할 수 있습니다

첫 번째로드 이외의 요청에 대해서는 매우 느린 복제로 대량 배치로 작성하지 않는 한 매우 적은 양의 단일 변경을 예상 한 UI가있는 것처럼 보입니다.

+0

현재 이것은 초기 동기화에서만 작동하며 문서의 첫 번째로드를 정확하게 추적 할 수 있습니다. 제안에 따라 코드를 업데이트했습니다. 감사합니다. 그러나 새 개정판이있는 문서의 복제를 시도하고 추적하기 위해이 단계를 더 진행하고 싶다면 API에서 이와 같은 내용을 노출합니까? 이와 같은 것을 시도하고 구현하는 좋은 방법은 무엇입니까? –

+0

pouchdb 복제가 서버에서 업데이트 된 버전을 확인한 다음 변경 사항을 처리하고 처리 된 문서 수를 docs_written에 추가하는 것으로 알고 있습니다. 그런 이유로 checkServerDifference() === totalLocalDocumentsToUpdateCount가 없습니까? –