我使用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
可能的瓶颈在哪里?解决方案或想法?
答案 0 :(得分:1)
复制协议极其繁琐。在初始复制中花费了大量时间。
答案 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。