上下文
我使用PouchDB并使用indexedDb拥有localDB。我使用此功能不断将此本地数据库复制到远程数据库(CouchDB):
function replLocalToRemote() {
this.meta.localDB.replicate.to(this.meta.remoteDB, {
// Live: replication occurs as the changes are detected
live: true,
retry: true,
}).on('paused', function (info) {
console.log('paused', info);
// replication was paused, usually because of a lost connection
}).on('change', function (change) {
console.log('change', change);
// yo, something changed!
}).on('active', function (info) {
console.log('active', info);
// replication was resumed
}).on('error', function (err) {
alert('replication failed. Retry... ', err);
// totally unhandled error (shouldn't happen)
});
}
效果很好但是当设备上的数据太多时会出现问题。特别是在IOS上,Safari不断打开弹出窗口,要求更多数据存储(从5Mo开始)。
问题
所以我想清理localDB,因为我将它复制到remoteDB。例如,一旦在远程上删除本地文档并继续复制,即使远程数据多于本地数据也是如此。
这可能吗?
答案 0 :(得分:0)
删除本地文档会导致您遇到问题,因为删除操作会被复制到远程数据库,因此您将完全丢失文档。
您是否看过PouchDb中的“自动压缩”功能?通过删除任何“非叶子”修订文档(以前的版本),最小化本地数据库的大小。
您可以像这样启用此功能:
var db = new PouchDB('mydb', {auto_compaction: true});
有关此内容的详情请见the PouchDb page。
答案 1 :(得分:0)
您可以尝试的是不时地(例如每天)创建一个新的本地数据库,并从那里开始一个新的复制。保留旧的dbs,只要它们仍然可以复制,并在完全复制后立即删除它们。
为了不丢失任何数据,在删除数据库之前,应特别注意所有数据都已复制到服务器。