2016-05-26 14 views
5

Dzięki samouczkowi FlashLight https://github.com/firebase/flashlight można w prosty sposób przeprowadzić pełne wyszukiwanie w Firebase.W jaki sposób ubezpieczać indeksowanie każdego obiektu za pomocą Firebase FlashLight w instancji Bonsai Free ElasticSearch

Jeśli jednak zachować wolną instancji ES, jest ograniczone w perspektywie dostępu współbieżności, a kiedy zaczniesz swoją aplikację węzła, można zobaczyć następujący komunikat w dzienniku:

failed to index firebase/xxx/-KHLhdwGplb3lHWjm8RS: Error: Concurrent request limit exceeded. Please consider batching your requests, or contact [email protected] for help.

Jak rozwiązać to ?

Odpowiedz

9

Jeśli masz kilka danych do zindeksowania, aplikacja Latarka poprosi ES o indeksowanie każdego obiektu w locie, bez ograniczeń dostępu do zasobów. Musisz kontrolować/ograniczać dostęp do tego zasobu udziału za pomocą semafora.

Install semafora lib

npm i --save semaphore 

edytować plik PathMonitor.js i ograniczyć dostęp do zasobu ES do 1

PathMonitor.prototype = { 
    _init: function() { 
     this.sem = require('semaphore')(1); 
     this.addMonitor = this.ref.on('child_added', this._process.bind(this, this._childAdded)); 
     this.changeMonitor = this.ref.on('child_changed', this._process.bind(this, this._childChanged)); 
     this.removeMonitor = this.ref.on('child_removed', this._process.bind(this, this._childRemoved)); 
    }, 
    ... 
    _index: function (key, data, callback) { 
     var that = this; 
     that.sem.take(function() { 
      that.esc.index({ 
       index: that.index, 
       type : that.type, 
       id : key, 
       body : data 
      }, function (error, response) { 
       that.sem.leave(); 
       if (callback) { 
        callback(error, response); 
       } 
      }.bind(that)); 
     }); 
    }, 
    ... 
} 

To nie mogą być wymagane w przypadku płatnego planu.

+0

To zadziałało, świetnie. Dzięki! – Simon

+0

@Anthony: Zrobiłem twoją sugestię i nadal mam ten sam błąd –