PouchDB:在remoteDB上安全时清除localDB

时间:2017-01-09 14:27:48

标签: javascript couchdb pouchdb

上下文

我使用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。例如,一旦在远程上删除本地文档并继续复制,即使远程数据多于本地数据也是如此。

这可能吗?

2 个答案:

答案 0 :(得分:0)

删除本地文档会导致您遇到问题,因为删除操作会被复制到远程数据库,因此您将完全丢失文档。

您是否看过PouchDb中的“自动压缩”功能?通过删除任何“非叶子”修订文档(以前的版本),最小化本地数据库的大小。

您可以像这样启用此功能:

var db = new PouchDB('mydb', {auto_compaction: true});

有关此内容的详情请见the PouchDb page

答案 1 :(得分:0)

您可以尝试的是不时地(例如每天)创建一个新的本地数据库,并从那里开始一个新的复制。保留旧的dbs,只要它们仍然可以复制,并在完全复制后立即删除它们。

为了不丢失任何数据,在删除数据库之前,应特别注意所有数据都已复制到服务器。