PouchDB复制速度加快了吗?

时间:2015-12-14 00:05:23

标签: couchdb pouchdb

我使用CouchDB / PouchDB作为Cordova地图应用的离线平铺服务器。 CouchDB 215mb db在手机上的初始复制在本地网络上需要两个多小时。 CouchDB到CouchDB复制在本地网络上需要6分钟。 Db包含65000个文档,png附件为1-2KB。

function managePouchDB(networkState) {
        // replicate tiles from local workstation
        var remoteCouchdb_osm_bc = "http://192.168.12.5:5984/osm_bc_simple_z6-13_tiles";
        var tiledb_rep_opts = {
            // http://pouchdb.com/api.html#replication
            live: true,
            retry: true,
            // batch size: tried 10 - 100; 10 works best for osm tiles replication w/ nginx
            batch_size: 10, // default = 100
            attachments: true
        };

        // replicate osm bc tiles on check
        var pouchTilesDB_osm_bc_baselayer_replicate = pouchTilesDB_osm_bc_baselayer.replicate.from(remoteCouchdb_osm_bc, tiledb_rep_opts);
        var pouchTilesDB_osm_bc_storedState = localStorage.getItem("pouchTilesDB_osm_bc_storedState");
        if (pouchTilesDB_osm_bc_storedState === "true") {
            pouchTilesDB_osm_bc_baselayer.replicate.from(remoteCouchdb_osm_bc, tiledb_rep_opts);

我减少了批量大小,这减少了复制时间,但仍然只能看到〜2mb / min的复制。

直接调用的在线CouchDB图块显示效果很好。使用CouchDB V1.6.1,PouchDB V4.0.3

可能的瓶颈在哪里?解决方案或想法?

3 个答案:

答案 0 :(得分:1)

复制协议极其繁琐。在初始复制中花费了大量时间。

查看此工具:https://github.com/nolanlawson/pouchdb-load

答案 1 :(得分:1)

正如亚历克斯所说,您可以使用pouchdb-load来加快复制速度。

但是,当CouchDB 1.7和CouchDB 2.0发布时,它们会自动修复,所以你可以等待。我相信Cloudant也已经发布了修复程序。有关加速的详细信息,请参阅this JIRA

答案 2 :(得分:0)

我添加的代码:

var remoteCouchdb_osm_bc_dump ="http://192.x.x.x:8092/data/osm_tiles_dump.txt";

if ((pouchTilesDB_osm_bc_storedState === "true") && (networkState === "WiFi_connection" || "wifi")) {
   pouchTilesDB_osm_bc_baselayer.load(remoteCouchdb_osm_bc_dump , {
        proxy: remoteCouchDB_osm_bc
   }).then(function () {
        // done loading! handoff to regular replication
        console.log("Done loading osm dump to PouchDB");
        pouchTilesDB_osm_bc_baselayer.info().then(console.log.bind(console));
        return pouchTilesDB_osm_bc_baselayer.replicate.from(remoteCouchdb_osm_bc, tiledb_rep_opts);        
   }).catch(function (err) {
         // HTTP error or something like that
         console.log("error on osm_bc dump to PouchDB");
});

从手机运行时不会抛出上述错误,但导致应用崩溃&重新开始。没有db.load就不会发生。转储文件在不到1分钟的时间内下载到手机,所有文档似乎都是以db为单位

pouchTilesDB_osm_bc_baselayer.info().then(console.log.bind(console));

然后抛出错误并崩溃。

在Chromium中调试时抛出了CORS错误,并通过Access-Control-Allow-Origin对Nginx(http://enable-cors.org/server_nginx.html)进行了排序。如果短路=电路,则CORS错误来自访问dump.txt文件,而不是CouchDB。没有在手机中显示Cordova应用程序。

虽然复制是“健谈”,但并不能完全解释为什么CouchDB到PouchDB比CouchDB复制要慢得多。将测试CouchDB 2.0。

我可以从笔记本电脑中转储文件。花了41s。