Я работаю над проектом, который включает в себя репликацию localDB в cloudant. У меня есть некоторые проблемы с этим:
1. Поскольку я использую websql в качестве адаптера и nodejs на серверной части приложения для Android, мне нужно использовать префикс для перехода базы данных в каталог данных, чтобы иметь возможность открыть файл db. Из-за этого, когда я пытаюсь выполнить репликацию в облачную или любую другую удаленную базу данных, совместимую с pocuhDB, она не работает, если я не использую pouchdb, replication (local, remote, opts); Таким образом, репликация возможна, но есть ли способ сделать репликацию возможной с помощью фокстона, а не жесткого кодирования?
Пример
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. Первоначальная репликация очень медленная для документов 100 КБ (без вложений размером 100 МБ), для синхронизации требуется около 1 часа 45 минут (через API репликации pouchDB). Я прошел через проблемы и попытался реализовать поток репликации pouchDB и использовал репликацию потока памяти (dump / load). Изменение 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)
});
Может кто-нибудь предложить мне эффективный способ для этого?
Любая помощь или предложение будет оценено