Ouvrir le menu principal

Wikipédia β

Filtre de Bloom

Structure de données probabiliste, utilisant des fonctions de hachage pour enregistrer un ensemble d’éléments dans un espace mémoire limité, et permettant de vérifier si un élément donné appartient à l’ensemble.

Un filtre de Bloom est une structure de données inventée par Burton Howard Bloom en 1970. C'est une implémentation de l'ensemble (comme type abstrait).

Cette structure est probabiliste : lors du test de la présence d'un élément dans un ensemble, un filtre de Bloom permet de savoir :

  • avec certitude que l'élément est absent de l'ensemble (il ne peut pas y avoir de faux négatif) ;
  • avec une certaine probabilité que l'élément peut être présent dans l'ensemble (il peut y avoir des faux positifs).

La taille d'un filtre de Bloom est fixe et indépendante du nombre d'éléments contenus, ce qui est remarquable, et en fait une structure très compacte. L'inconvénient est toutefois qu'il y a d'autant plus de faux positifs qu'il y a d'éléments dans la structure.

Sommaire

PrincipeModifier

Le filtre a deux composantes :

  • T : un tableau booléen (on dira 0 et 1) de taille m dont chaque case est initialisée à 0. (indexé de 1 à m)
  •   : k fonctions (de hachage) de   (P l'ensemble des possibles (relativement au problème considéré : ce peut être un ensemble de mots, de nombres etc.))

L'ajout d'un élément   se fait en mettant à 1 chaque case d'indice   dans le tableau T pour i variant de 1 à k.

La requête d'un élément   consiste à vérifier si toutes les cases d'indices   (i variant entre 1 et k) sont à 1 dans le tableau T.

Proportion de faux-positifsModifier

Il est possible d'évaluer la proportion de faux-positifs en fonction de divers paramètres. Ainsi, si l'on considère une fonction de hachage qui choisit un élément de l'ensemble de manière équiprobable, et que m représente le nombre de bits dans cet ensemble, et que k représente le nombre de fonctions de hachage, alors la probabilité qu'un bit donné soit laissé à 0 par une fonction de hachage donnée vaut  .

Si l'on généralise ceci à l'ensemble des fonctions de hachage considérées, alors cette probabilité devient  .

Si l'on considère à présent que ce filtre reçoit n éléments (chaînes de caractères...), la probabilité qu'un bit donné vaille 0 vaut  . On en déduit que la probabilité que ce bit vaille 1 est  

Ainsi, si l'on teste la probabilité de présence d'un élément qui n'est pas dans l'ensemble, chaque position k possède la probabilité ci-dessus de valoir 1. La probabilité que tous les k vaillent 1 (déclenchant un faux-positif) découle des calculs précédents :  

ImplémentationModifier

ApplicationsModifier

Ce genre de filtre permet d'éviter des appels inutiles à une très grande base de données en vérifiant tout de suite qu'une ligne recherchée n'y est pas présente. Le filtre n'étant pas parfait, la recherche inutile aura toutefois lieu dans certains cas, mais une grande partie sera néanmoins évitée, multipliant ainsi le nombre de requêtes utiles possibles à matériel donné. Cette méthode est utilisée par Google dans leur base de données distribuées, BigTable[1]. Ce type de filtre est également utilisé pour réaliser de l'inspection de paquets en profondeur[2], en vertu des raisons citées plus haut. Leur implémentation au niveau matériel a permis de réaliser de l'inspection de paquets en profondeur à la vitesse du réseau.

Elle permet aussi d'optimiser les flux entre pairs dans un réseau informatiques pairs à pairs, comme Gnutella.

Ce filtre est utilisé dans les moteurs de rendu HTML pour augmenter les performances des sélecteurs CSS[3].

RéférencesModifier

  1. Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C Hsieh, Deborah A Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes  et Robert E Gruber, « Bigtable: A distributed storage system for structured data, », ACM Transactions on Computer Systems (TOCS), ACM, vol. 26, no 2,‎ , p. 4 (lire en ligne)
  2. Deep packet Inspection using parallel Bloom Filters
  3. (en) Nicole Sullivan, « CSS Selector Performance has changed! (For the better) », sur Performance Calendar, .

BibliographieModifier

  • Burton H. Bloom, « Space/Time Trade-offs in Hash Coding with Allowable Errors », Commun. ACM, vol. 13, no 7,‎ , p. 422-426 (présentation en ligne)

Liens externesModifier