Filtrage Web/ Web Filter

Stockage

mardi 25 avril 2006 par ClarK

Au fur et a mesure de la détection, sachant quelle expression régulière a rencontré le token désiré on est en mesure de savoir quel est son type.
On peut alors le stocker.
Pour ce faire il faut d’abord découper les tokens déjà récupérés (les balises html et les mots) suivant des séparateurs afin d’obtenir des tokens plus petits et plus précis, quant à ce qu’ils représentent, puis d’indiquer avant le token quel est son type (balise, domaine, mot ou bi-mot).

Nos besoins sont de pouvoir stocker un des tokens et le nombre d’occurrences correspondantes. Il s’agit en fait de stocker une paire clé/données dans laquelle la clé est le token (qui est unique) et les données sont les nombres d’occurrences (dans les catégories autorisée et interdite) ce token.

Il n’y a pas de requête complexe à effectuer sur cette base. On veut juste pouvoir stocker la paire et y accéder rapidement lors de l’attribution de score.

Sleepycat Software a développé Berkeley DB qui correspond exactement à nos attentes.
En effet, Berkeley DB permet de stocker des données sous la forme (clé) / (données) dans laquelle la clé est unique.
Pour ce qui est de la structure nous sommes libre de choisir entre un hash, un B-Arbre, ou une file. De plus elle permet de gérer la taille de la mémoire tampon afin d’optimiser la vitesse d’accès aux données.

Cet outil semble donc être celui qui nous est nécessaire par ces méthodes de stockage ainsi que ces méthodes d’accès aux données optimisées. Nous arrêterons donc notre choix sur cette base de données.

Cependant nous devons stocker un couple de valeurs par clé, et afin d’optimiser l’espace stockage il faut coder ce couple.

Plutôt que de stocker deux entiers on va coder les valeurs sur quatre octets (deux fois deux octets, soit deux octets par entier) pour stocker d’une par le nombre d’occurrences autorisées et d’autre part le nombre d’occurrences interdites.

Le nombre maximal que l’on peut coder sur 1 octet est 28 - 1 = 255 et on peut coder 28 = 256 valeurs (de 0 à 255).
De même sur 2 octets on peut coder 2562 = 65536 (de 0 à 65535).
Un nombre en base 10 peut donc s’écrire sous la forme : X10 = a256 + b256.

Ce qui nous donne :

  • a = E(x/256)
  • b = Xmod(256)

Comme un token n’est compté qu’une fois par page lors de l’apprentissage (et est codé sur deux octets), il faudrait avoir 65536 pages en apprentissage, dans l’une ou l’autre catégorie, pour que la zone mémoire soit dépassée. On a donc une bonne marge de sécurité quand à cette valeur limite.


-->

Forum

Accueil du site | Contact | Plan du site | Espace privé | visites : 4468

RSS RSSfr

Site réalisé avec SPIP 1.8.3 + ALTERNATIVES