成功复制后,两个CouchDB数据库是否保证具有相同的序列号?

时间:2015-03-23 19:09:46

标签: progress-bar couchdb database-replication pouchdb

我正在开发一个进度条,以显示远程CouchDB数据库和本地浏览器托管的PouchDB数据库之间的复制进度。

目前,我使用每个数据库中的文档数来确定进度的百分比。但是,如果在任一数据库中替换了大量记录,则此百分比进度不准确。

我想使用其他一些值来显示复制进度。复制完成后,我可以依靠完成复制的两个数据库的序列号相同吗?

2 个答案:

答案 0 :(得分:2)

您可以在案例中使用active tasks端点。除了其他事项,它还包括任务的进度百分比。例如,复制任务将如下所示

{
        "checkpointed_source_seq": 68585,
        "continuous": false,
        "doc_id": null,
        "doc_write_failures": 0,
        "docs_read": 4524,
        "docs_written": 4524,
        "missing_revisions_found": 4524,
        "pid": "<0.1538.5>",
        "progress": 44**,
        "replication_id": "9bc1727d74d49d9e157e260bb8bbd1d5",
        "revisions_checked": 4524,
        "source": "mailbox",
        "source_seq": 154419,
        "started_on": 1376116644,
        "target": "http://mailsrv:5984/mailbox",
        "type": "replication",
        "updated_on": 1376116651
    }

更新序列号特定于数据库。假设您在数据库中有9个文档,并且update_seq为17. update_seq表示数据库已更新17次,即使文档数为9.现在,如果将其复制到新数据库为空,则update_seq新数据库的数量为9,因为它只更新了9次。由于新数据库为空,因此仅创建了9个新文档。

如果它包含一些文件,那么更新号码将根据其_rev的不同而不同。因此,不能依赖update_seq来计算复制操作的进度。

答案 1 :(得分:1)

我经常使用的一个技巧是使用last_seq / update_seq作为进度指示器。例如。看我的回答here