3. La base de donnée

Nous avons choisi d’utiliser une base de donnée Oracle avec notre moteur de recherche car :
- Oracle est optimisé pour de gros volume de données.
- Oracle offre l’utilisation de procédures stockées en pl/sql.

3.1. Modèle conceptuel


Voici le schéma conceptuel de la base de donnée utilisée par notre moteur de recherche :

 

Il y a deux entités dans le modèle conceptuel URI et MotCle qui, comme leur nom l’indique, servent à stocker les données relatives aux URI et aux mots de recherche.
Nous avons fait le choix d’introduire les champs id_uri et un id_mot en tant que clef primaires des tables URI et MotCle car ces deux champs peuvent être très volumineux. S’ils avaient été clef primaire il y aurait pu y avoir une importante redondance d’informations dans les tables UriMot et LinkOut.
La relation LinkOut est une relation père fils qui permet de pouvoir dessiner un graphe du web. Enfin la relation UriMot fait le lien entre un mot de recherche et une URI.

3.2. Modèle physique

 

Le modèle conceptuel de donnée a abouti sur la base de donnée physique représentée ci-dessus.

Nous avons créer des d’index sur les champs lib_mot de la table MotCle et lib_uri de la table URI pour accélérer les requêtes. En effet la majorité des sélections sur les tables MotCle et URI se font grâce à ces champs. Les index sur les clefs primaires étant créé automatiquement par la base de donnée Oracle il n’a pas été nécessaire de créer explicitement ceux-ci.
Les identifiants id_uri, et id_mot sont généré par deux séquences ce qui garanti que chaque clef primaire sera différente des autres.

3.3. Procédures stockées


Nous avons choisis d’utiliser des procédures stockées dans le but d’exécuter des traitements fréquemment utilisés au niveau du noyau du SGBD plutôt que dans l’application java. De plus la création d’une procédure stockée génère le pseudo code qui est stocké dans la base, ce qui évite la recompilation de la procédure à chaque appel. L’utilisation de procédures stockées est donc plus rapide qu’une série de requête faite à partir du module report.sql.

Les procédures stockées utilisées par le Crawler sont :