2015-08-26 4 views
1

J'utilise un filtre bloom dans une application pour rechercher les doublons:Suppression/La réinitialisation/Suppression d'un filtre Bloom dans NodeJS

var BloomFilter = require('bloom-filter'); 

var numberOfElements = 30000; 
var falsePositiveRate = 0.005; 
var filter = BloomFilter.create(numberOfElements, falsePositiveRate); 

var workFunction = function(var1, var2) { 


     var bloomData = new Buffer(var1 + var2, "hex"); 

     if(!filter.contains(bloomData)){ 

      console.log("In the loop, adding the element to the bloom filter now!"); 
      filter.insert(bloomData); 

     // work with the data and see if I found a needle in the haystack .. if yes, the bloom filter needs a reset ! 
     if (var === "123") { 
      console.log("Needle found, resetting to fresh filter, new round !"); 
      var filter = BloomFilter.create(numberOfElements, falsePositiveRate); // WRONG HERE but you get the idea! 
     } 


     } else { 
      console.log("This entry is already in the bloom filter !"); 
     } 
} 



workFunction("1234", "1234"); 

Après un certain nombre de tours que je voudrais réinitialiser/clear/renouveler le filtre comme vous le voyez dans ma déclaration ci-dessus mais cela échoue bien sûr car il est encore utilisé à ce moment-là.

Comment est-ce que j'écrirais un rappel ou similaire pour obtenir le filtre remis à zéro?

Merci

+1

cela devrait fonctionner si vous supprimez le 'var' avant' var filter = ... 'dans le rappel, vous redéfinissez une nouvelle variable locale' filter' – Plato

Répondre

0

Il ressemble à celui des modules de nœud particulier ne dispose pas d'une méthode reset ou quelque chose de semblable dans l'API.

Il semble que vous pouvez faire 2 choses à ce stade.

1.Assurez un problème pour cette prise en pension demandant une telle fonctionnalité (ou écrire votre propre Pull-Demande) https://github.com/jasondavies/bloomfilter.js

2.Change le comportement de vous workFunction pour réinitialiser le filtre.

var workFunction = function(var1, var2) { 
    var filter = BloomFilter.create(numberOfElements, falsePositiveRate); 
    // ... 
} 

Ou quelque chose de similaire pour le réinitialiser.

+0

essayé filter.clear() mais il semble détruire et ne pas réellement effacer le filtre. – biergardener