PouchDB中的最大实时复制数

时间:2018-01-04 16:32:00

标签: ionic-framework pouchdb

我正在开发一个带有PouchDB的Ionic应用程序,需要将表与远程CouchDB服务器同步。 在我的database.ts提供程序的构造函数中,我有6个方法:

this.initialiseDB_Ord();
this.initialiseDB_IngProd();
this.initialiseDB_Ing();
this.initialiseDB_Prod();
this.initialiseDB_OrdProd();
this.initialiseDB_Ut();

这些方法中的每一个都执行以下操作(我选择第一个作为示例):

this._DB_Ord = new PouchDB('orders');
this._remoteDB_Ord = this.addressIP + '/orders';
this._syncOpts_Ord = {  live : true,
                        retry : true,
                        continuous : true};
this._DB_Ord.sync(this._remoteDB_Ord, this._syncOpts_Ord)
.on('change',(info) => {
     console.log('Handling syncing change');
     console.dir(info);
}).on('paused',(info)=> {
     console.log('Handling syncing pause');
     console.dir(info);
}).on('active', (info) => {
     console.log('Handling syncing resumption');
     console.dir(info);
}).on('denied', (err) =>{
     console.log('Handling syncing denied');
     console.dir(err);
}).on('complete', (info) =>{
     console.log('Handling syncing complete');
     console.dir(info);
}).on('error', (err)=>{
     console.log('Handling syncing error');
     console.dir(err);
});

然后我有一个handleSyncing方法如下:

handleSyncingUt() {
  this._DB_Ut.changes({
       since             : 'now',
       live              : true,
       include_docs      : true,
       attachments   : true
  })
  .on('change', (change) =>
  {
     console.log('Handling change');
     console.dir(change);
  })
  .on('complete', (info) =>
  {
     console.log('Changes complete');
     console.dir(info);
  })
  .on('error',  (err) =>
  {
     console.log('Changes error');
     console.log(err);
  });
}

如果我有最多5个数据库,它可以正常工作。 添加第六个数据库后,它不会实时同步本地pouchDB和远程couchDB,但只有在首次打开应用程序时才会同步。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

浏览器的最大页数为sockets per domain和每页,并且您通过live:true连接超过了它。 Chrome分享了标签之间的第一个限制,因此您可以验证更少连接的多个标签导致Chrome中的问题,或者通过提高firefox的about:config中的限制。

您无法为普通用户真正修复此限制,并且需要调整管理连接的方式(例如worker可以管理Chrome中许多标签的一个数据库同步)和数据设计可能会被更改为仅观察一个"更改" db经常知道何时在其他dbs上运行live:false次传递。

答案 1 :(得分:2)

@lossleader是关于浏览器/ WebView中最大连接数的钱。在Quizster,我们遇到同样的问题,因为Quizster必须同时同步多达10个PouchDB实例。这是使用Howler来订阅一组数据库的更改。在更改其中一个数据库后,Quizster会在PouchDB实例和CouchDB集群之间发出一次性(非实时)同步。

更多背景知识:Quizster必须将这多个PouchDB实例同步为:

  1. 这样做可以避免在数据库之间复制更多数据,从而降低共享数据的延迟时间
  2. Quizster使用大量数据库视图来加速复制并使数据集的大小保持较小。而且,每个视图都有效地导致了自己的PouchDB实例。
  3. 我计划很快开源更多的Quizster堆栈,并希望发布一些教程。