2015-12-14 117 views
0

我正在使用CouchDB/PouchDB作爲Cordova地圖應用程序的離線磁貼服務器。本地網絡上的CouchDB 215mb db初始複製需要兩個多小時。本地網絡上的CouchDB到CouchDB複製需要6分鐘。 Db包含65000個文件,其中包含1-2KB的png附件。PouchDB複製速度快嗎?

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

可能的瓶頸在哪裏?解決方案或想法?

回答

1

複製協議非常健談。這種成本在初始複製中需要很多時間。

看看這個工具:https://github.com/nolanlawson/pouchdb-load

+0

謝謝。看起來是我需要的。 將最簡單的情況編碼到測試代碼中。得到錯誤: GET HTTP://192.168.xx:2092 /數據/ osm_bc_simple_z6-13_tiles_dump_dec1420151306.txt 網:: ERR_CONTENT_LENGTH_MISMATCH 這一個: PouchDB:遠程數據庫可能沒有CORS enabled.If不請啓用CORS :http://pouchdb.com/errors.html#no_access_control_allow_origin_header CORS允許啓用。 – user2898616

+0

我想我有同樣的問題在第一時間:嘗試添加「X-CSRF令牌」,以「CORS」>「頭」 – Alex

+0

沒有關於內容長度不匹配的想法,對不起 – Alex

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分鐘的手機轉儲文件下載,所有文檔似乎是在分貝每

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。不顯示在手機中的科爾多瓦應用程序。

雖然複製是「繁瑣」這並不能完全解釋爲什麼CouchDB的到PouchDB比CouchDB的這麼慢得多CouchDB的複製。將測試CouchDB 2.0。

我可以從筆記本電腦wget轉儲文件。花了41秒。

0

正如Alex所說,您可以使用pouchdb-load進行更快的複製。

然而,緩慢將自動CouchDB中1.7和2.0的CouchDB當那些得到釋放固定的,所以你可以等待。我相信Cloudant已經發布了修補程序。有關加速的詳細信息,請參閱this JIRA