我正在从事一个项目,其中包括将localDB复制到cloudant。我有一些问题:
1。由于我使用websql作为适配器,并且使用android应用程序的后端上的nodejs,因此我需要使用前缀将数据库导航到数据目录,以便能够打开db文件。因此,当我尝试复制到cloudant或任何其他远程pocuhDB兼容数据库时,除非我使用pouchdb,replication(local,remote,opts),否则它将无法正常工作;这样可以进行复制,但是有什么方法可以使从fauxton进行复制而不是硬编码?
let opts = {live:true,retry:true},
Promise = require('bluebird'),
fs = require('fs'),
path = require('path'),
express = require('express'),
app = express(),
PouchDB = require('pouchdb-core'),
replicationStream = require('pouchdb-replication-stream'),
memoryStream = require('memorystream'),
log = path.join(cordova.app.datadir(),"log.txt"),
backup = path.join(cordova.app.datadir(),"backup.txt"),
prefix = path.join(cordova.app.datadir(),"db"),
pouchdb = PouchDB.plugin(require('pouchdb-adapter-node-websql')).plugin(require('pouchdb-
adapter-http')).plugin(require('pouchdb-mapreduce')).plugin(require('pouchdb- replication')).plugin(replicationStream.plugin);
pouchDB = pouchdb.defaults({prefix:prefix});
let pouchHandle = require('express-pouchdb')(pouchDB,{logPath:log});
PouchDB.adapter('writableStream',replicationStream.adapters.writableStream);
let stream = new memoryStream();
let config = pouchHandle.couchConfig;
app.use(cors(config));
console.log("Config file set");
app.use('/',pouchHandle);
server = app.listen(port).on('error',console.log);
let db = new pouchDB('posdemo',{adapter:'websql'});
db.changes({live: true, since:'now'}).on('change',console.log);
pouchdb.replicate(remote,db,opts);
pouchdb.replicate(db,remote,opts);
2。对于100k(没有附件大小为100mb)的文档,初始复制非常慢,大约需要1小时45分钟才能同步(通过pouchDB的复制API)。我经历了这些问题,并尝试实现pouchDB复制流并使用了内存流复制(转储/加载)。更改batch_limit和batch_size大约花费了45分钟。有没有一种方法可以使初始复制更快,更有效。由于文档数量可能会更高。
3。当我使用db.dump(stream)时,假设文档数量为35000,它只会转储2800个文档。这是我的转储代码:
var backup = path.join(cordova.app.datadir(),"backup.txt");
var ws = fs.createWriteStream(backup);
db.dump(ws,{since:0}).then(function(res){
console.log(res);
}).catch(function(err){
console.log(err)
});
有人可以建议我这样做的有效方法吗?
任何帮助或建议将不胜感激