Base de données du crawler

elgood
  |
  +--src_bd
        |
        +--crawler.sql

Objectifs / contraintes :

Le but de cette base de données est :

De plus, la base de données doit également répondre à une exigence importante du point de vue des performances du crawler : elle doit savoir gérer des accès concurrents tout en garantissant à tout moment l'intégrité des données qu'elle contient.
Enfin, elle doit être accessible à la fois par le crawler proprement dit (le processus recherchant tous les liens présents sur le réseau) et le module d'interrogation (l'interface utilisateur).

Implémentation :

Plusieurs solutions techniques étaient possibles pour implémenter cette base de données :

Compte tenu des contraintes précédemment vues, l'implémentation retenue est celle utilisant un SGBD existant, et plus exactement en utilisant Postgresql.
En effet, cette base de données (dans le reste de cette documentation, le terme 'base de données' désigne par abus de langage à la fois un base de données proprement dite et un SGBD) présente plusieurs avantages :

Architecture :

Remarque : Les relations en pointillés n'existent pas réellement dans la base de données. En effet, ce sont des relations fonctionnelles donc un champ id_site est directement rajouté aux tables Pict et Page .
Remarque: Il faut aussi noter l'existence d'une table non représentée sur le schéma : SuppFic. Cette table n'a aucun lien avec les tables précédentes car il s'agit en fait d'une table temporaire qui sert à la maintenance de la base de données et qui ne stocke aucune information utiles au crawler.


Table Summary
Site
          Stocke les sites dont on a visité au moins une page.
Page
          Stocke les pages visitées, c'est à dire dont on a analysées le contenu à la recherche de tous les liens qu'elles contiennent.
Http
          Stocke les liens de type http trouvés dans toutes les pages visitées.
MotHttp
          Contient tous les mot permettant de désigner une adresse http.
AppHttp
          Indique dans quelle(s) page(s) se trouve le lien http l référencé par un mot m.
RefHttp
          Indique quel(s) mot(s) décrive(nt) quel(s) lien(s).
          Modification de dernière minute: table supprimée...
Mail
          Stocke les liens de type mailto trouvés dans toutes les pages visitées.
MotMail
          Contient tous les mot permettant de désigner une adresse de courier électronique.
AppMail
          Indique dans quelle(s) page(s) se trouve le lien mailto l référencé par un mot m.
RefMail
          Indique quel(s) mot(s) décrive(nt) quel(s) lien(s) de type mailto.
          Modification de dernière minute: table supprimée...
Pict
          Stocke les liens de type img (c'est à dire vers des images) trouvés dans toutes les pages visitées.
MotPict
          Contient tous les mot permettant de désigner une image.
AppPict
          Indique dans quelle(s) page(s) se trouve le lien img l référencé par un mot m.
RefPict
          Indique quel(s) mot(s) décrive(nt) quel(s) lien(s) de type img.
          Modification de dernière minute: table supprimée...
SuppFic
          Table servant à la maintenance de la base de données.
 
Sequence Summary
Site_id_site_seq
          Séquence générant pour chaque site visité un identificateur unique.
Page_id_page_seq
          Séquence générant pour chaque page visitée un identificateur unique.
Http_id_http_seq
          Séquence générant pour chaque lien http visité un identificateur unique.
MotHttp_id_mot_seq
          Séquence générant pour chaque mot désignant un lien http un identificateur unique.
Mail_id_mail_seq
          Séquence générant pour chaque adresse mail trouvée un identificateur unique.
MotMail_id_mot_seq
          Séquence générant pour chaque mot associé à une adresse mail un identificateur unique.
Pict_id_pict_seq
          Séquence générant pour chaque image trouvée un identificateur unique.
MotPict_id_mot_seq
          Séquence générant pour chaque mot associé à une image un identificateur unique.
 
Function Summary
INTEGER ins_http_url(INTEGER,TEXT,TEXT,INTEGER)
          Fonction pour insérer un lien de type http (vers une page web) désigné d'après une chaine de caractères.
INTEGER ins_http_id(INTEGER,INTEGER,TEXT,INTEGER)
          Fonction pour insérer un lien de type http (vers une page web) désigné par son identificateur.
INTEGER ins_mail_adr(INTEGER,TEXT,TEXT,INTEGER)
          Fonction pour insérer un lien de type mailto (vers une adresse mail) désigné d'après une chaine de caractères.
INTEGER ins_mail_id(INTEGER,INTEGER,TEXT,INTEGER)
          Fonction pour insérer un lien de type mailto (vers une adresse mail) désigné par son identificateur.
INTEGER ins_pict_nom(INTEGER,INTEGER,TEXT,TEXT,TEXT,TEXT,INTEGER)
          Fonction pour insérer un lien de type img (vers une image) désigné par le chemin de l'image, son nom et le nom du fichier contenant son code binaire.
INTEGER ins_pict_id(INTEGER,INTEGER,TEXT,INTEGER)
          Fonction pour insérer un lien de type img (vers une image) désigné par son identificateur.
INTEGER supp_page(INTEGER)
          Supprime la page dont l'indentificateur est passé en argument.

Table Detail

Site

CREATE TABLE Site (
  url TEXT NOT NULL UNIQUE,
  id_site SERIAL PRIMARY KEY
);
Stocke les sites dont on a visité au moins une page.

En effet, toute url peut se décomposer en deux parties:

Par exemple: http://www.rgagnon.com/javadetails/java-0083.html est une page appartenant au site http://www.rgagnon.com et dont le chemin est /javadetails/java-0083.html

Champs:
url - L'url du site (par ex: http://www.rgagnon.com)
id_site - Identificateur désignant de manière unique ce site
See also:
Site_id_site_seq

Page

CREATE TABLE Page (
  fin_url TEXT,
  id_site INTEGER,
  date INTEGER,
  id_page SERIAL PRIMARY KEY,
  UNIQUE(fin_url,id_site),
  FOREIGN KEY  (id_site) REFERENCES Site 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Stocke les pages visitées, c'est à dire dont on a analysées le contenu à la recherche de tous les liens qu'elles contiennent.

Une page est identifiée de façon unique par le site auquel elle appartient et le chemin de son code dans ce site.

Remarque: Le chemin d'une page peut être null (par ex, http://www.free.fr)

Champs:
fin_url - Le chemin de la page dans l'arborescence du site
id_site - L'identificateur du site dans lequel se trouve cette page
date - La date de dernière modification de la page
id_page - L'identificateur qui désigne de manière unique la page
See also:
Page_id_page_seq,Site

Http

CREATE TABLE Http (
  lien TEXT NOT NULL UNIQUE,
  id_http SERIAL PRIMARY KEY
);
Stocke les liens de type http trouvés dans toutes les pages visitées.

Un lien http est de la forme: <A HREF="http://www.gooogle.com">Moteur de recherche</A> .
Dans cette table on stocke l'adresse du lien, c'est dire http://www.gooogle.com.

Champs:
lien - Adresse http du lien trouvé
id_http - Identificateur désignant ce lien http de manière unique
See Also:
Http_id_http_seq

MotHttp

CREATE TABLE MotHttp (
  mot TEXT NOT NULL UNIQUE,
  id_mot SERIAL PRIMARY KEY
);
Contient tous les mot permettant de désigner une adresse http.

Un lien http est de la forme: <A HREF="http://www.gooogle.com">Moteur de recherche</A> .
Dans cette table on stocke les mots associés à l'adresse du lien, c'est dire moteur et recherche.

Les mots associés à un lien subissent plusieurs traitements avant d'être ajoutés à la base de données :


Champs:
mot - Mot décrivant un lien http
id_mot - Identificateur désignant de manière unique un mot relatif à un lien http
See Also:
MotHttp_id_mot_seq

AppHttp

CREATE TABLE AppHttp (
  id_page INTEGER NOT NULL,
  id_http INTEGER NOT NULL,
  id_mot INTEGER NOT NULL,
  occurence INTEGER DEFAULT 1,
  UNIQUE (id_page,id_http,id_mot),
  FOREIGN KEY  (id_page) REFERENCES Page 
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mot) REFERENCES MotHttp
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_http) REFERENCES Http 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Indique dans quelle(s) page(s) se trouve le lien http l référencé par un mot m.

Cette page a deux utilités:


Champs:
id_page - Identificateur d'une page dans laquelle on a trouvé le couple lien - mot.
id_http - Identificateur du lien http.
id_mot - Identificateur du mot.
occurence - Nombre de fois que ce couple lien - mot a été trouvé dans cette page.
See Also:
Http,MotHttp,Page

RefHttp

CREATE TABLE RefHttp (
  id_http INTEGER,
  id_mot INTEGER,
  UNIQUE (id_http,id_mot),
  FOREIGN KEY  (id_http) REFERENCES Http 
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mot) REFERENCES MotHttp 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Indique quel(s) mot(s) décrive(nt) quel(s) lien(s).
Un lien peut être décrit par plusieurs mot et un mot peut décrire plusieurs liens.

En fait, cette table devrait être supprimée dans une prochaine version car elle est inutile et dangeureuse. En effet:

On peut tout de même noter que cette table permet d'améliorer les performances de certaines requêtes (car cette table est bien moins grande que AppHttp) ; mais cela se fait au détriment de l'espace mémoire.

Champs:
id_http - Un lien http
id_mot - Un mot décrivant ce lien http
See also:
Http,MotHttp

Mail

CREATE TABLE Mail (
  mail TEXT NOT NULL UNIQUE,
  id_mail SERIAL PRIMARY KEY
);
Stocke les liens de type mailto trouvés dans toutes les pages visitées.

Un lien mail est de la forme: <A HREF="mailto:super.man@free.fr">Super Man</A> .
Dans cette table on stocke l'adresse du lien, c'est dire mailto:super.man@free.fr.

Champs:
mail - Adresse mail du lien trouvé
id_mail - Identificateur désignant ce lien mail de manière unique
See Also:
mail_id_mail_seq

MotMail

CREATE TABLE MotMail (
  mot TEXT NOT NULL UNIQUE,
  id_mot SERIAL PRIMARY KEY
);
Contient tous les mot permettant de désigner une adresse mail.

Un lien http est de la forme: <A HREF="mailto:monsieur.muscles@free.fr">Monsieur muscles</A> .
Dans cette table on stocke les mots associés à l'adresse, c'est dire monsieur et muscles.

Les mots associés à une adresse subissent plusieurs traitements avant d'être ajoutés à la base de données :


Champs:
mot - Mot décrivant un lien http
id_mot - Identificateur désignant de manière unique un mot relatif à un lien http
See Also:
MotMail_id_mot_seq

AppMail

CREATE TABLE AppMail (
  id_page INTEGER NOT NULL,
  id_mail INTEGER NOT NULL,
  id_mot INTEGER NOT NULL,
  occurence INTEGER DEFAULT 1,
  UNIQUE (id_page,id_mail,id_mot),
  FOREIGN KEY  (id_page) REFERENCES Page 
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mot) REFERENCES MotMail
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mail) REFERENCES Mail 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Indique dans quelle(s) page(s) se trouve le lien de type mailto l référencé par un mot m.

Cette page a deux utilités:


Champs:
id_page - Identificateur d'une page dans laquelle on a trouvé le couple lien - mot.
id_mail - Identificateur du lien mail.
id_mot - Identificateur du mot.
occurence - Nombre de fois que ce couple lien - mot a été trouvé dans cette page.
See Also:
Mail,MotMail,Page

RefMail

CREATE TABLE RefMail (
  id_mail INTEGER,
  id_mot INTEGER,
  UNIQUE (id_mail,id_mot),
  FOREIGN KEY  (id_mail) REFERENCES Mail 
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mot) REFERENCES MotMail 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Indique quel(s) mot(s) décrive(nt) quel(s) lien(s).
Un lien peut être décrit par plusieurs mot et un mot peut décrire plusieurs liens.

En fait, cette table devrait être supprimée dans une prochaine version car elle est inutile et dangeureuse. En effet:

On peut tout de même noter que cette table permet d'améliorer les performances de certaines requêtes (car cette table est bien moins grande que AppMail) ; mais cela se fait au détriment de l'espace mémoire.

Champs:
id_mail - Un lien vers une adresse électronique
id_mot - Un mot décrivant ce lien mail
See also:
Mail,MotMail

Pict

CREATE TABLE Pict (
  nom TEXT NOT NULL,
  chemin TEXT NOT NULL,
  id_site INTEGER,
  fichier TEXT,
  id_pict SERIAL PRIMARY KEY,
  UNIQUE(nom,chemin,id_site),
  FOREIGN KEY  (id_site) REFERENCES Site 
    ON UPDATE CASCADE
    ON DELETE CASCADE  
);
Stocke les liens de type img (c'est à dire vers une image) trouvés dans toutes les pages visitées.

Un lien img est de la forme: <IMG SRC="ICONS/redball.gif" HEIGHT=13 WIDTH=13 ALT="Baballe rouge">.

Dans cette table on stocke plusieurs informations afin d'être capable de désigner de manière unique n'importe quelle image. Pour cela, ils nous faut donc connaître :

Normalement le code binaire de l'image aurait dû être stocké dans la base de données. Cependant, pour cela, il aurait fallu soit être le super utilisateur postgres (pour pouvoir utiliser les fonctions lo_import et lo_export directement dans une requête SQL) ce qui est impossible, soit écrire unr fonction en C spécialement pour réaliser l'insertion ce qui aurait encore rajouter un langage de plus dans ce projet. Donc pour faire plus simple, les images sont stockées dans le répertoire local data/pict. I l faut donc rajouter à cet table un champ pour mémoriser le nom du fichier local contenant le code binaire de l'image.

Champs:
nom - Nom du fichier contenant l'image sur le serveur distant
chemin - Chemin absolu depuis la racine du site pour accéder au fichier
id_site - Identificateur du site auquel appartient l'image
fichier - Nom du fichier local dans lequel le code binaire de l'image est stocké
id_pict - Identificateur désignant cette image de manière unique
See Also:
Pict_id_pict_seq

MotPict

CREATE TABLE MotPict (
  mot TEXT NOT NULL UNIQUE,
  id_mot SERIAL PRIMARY KEY
);
Contient tous les mot permettant de désigner une image.

Un lien img est de la forme: <IMG SRC="ICONS/redball.gif" HEIGHT=13 WIDTH=13 ALT="Baballe rouge">.
Dans cette table on stocke les mots associés à l'image, c'est dire contenu dans le champ ALT du lien (baballe et rouge).

Les mots associés à une image subissent plusieurs traitements avant d'être ajoutés à la base de données :


Champs:
mot - Mot décrivant un lien http
id_mot - Identificateur désignant de manière unique un mot relatif à un lien http
See Also:
MotPict_id_mot_seq

AppPict

CREATE TABLE AppPict (
  id_page INTEGER NOT NULL,
  id_pict INTEGER NOT NULL,
  id_mot INTEGER NOT NULL,
  occurence INTEGER DEFAULT 1,
  UNIQUE (id_page,id_pict,id_mot),
  FOREIGN KEY  (id_page) REFERENCES Page 
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mot) REFERENCES MotPict
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_pict) REFERENCES Pict 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Indique dans quelle(s) page(s) se trouve le lien de type img l référencé par un mot m.

Cette page a deux utilités:


Champs:
id_page - Identificateur d'une page dans laquelle on a trouvé le couple lien - mot.
id_pict - Identificateur du lien image.
id_mot - Identificateur du mot.
occurence - Nombre de fois que ce couple lien - mot a été trouvé dans cette page.
See Also:
Pict,MotPict,Page

RefPict

CREATE TABLE RefPict (
  id_pict INTEGER,
  id_mot INTEGER,
  UNIQUE (id_pict,id_mot),
  FOREIGN KEY  (id_pict) REFERENCES Pict 
    ON UPDATE CASCADE
    ON DELETE CASCADE,
  FOREIGN KEY  (id_mot) REFERENCES MotPict 
    ON UPDATE CASCADE
    ON DELETE CASCADE
);
Indique quel(s) mot(s) décrive(nt) quel(s) lien(s).
Un lien peut être décrit par plusieurs mot et un mot peut décrire plusieurs liens.

En fait, cette table devrait être supprimée dans une prochaine version car elle est inutile et dangeureuse. En effet:

On peut tout de même noter que cette table permet d'améliorer les performances de certaines requêtes (car cette table est bien moins grande que AppPict) ; mais cela se fait au détriment de l'espace mémoire.

Champs:
id_pict - Un lien vers une image
id_mot - Un mot décrivant ce lien image
See also:
Pict,MotPict

SuppFic

CREATE TABLE SuppFic (
  fichier TEXT
);
Table servant à la maintenance de la base de données.

Cette table est mise à jour a chaque appel de la fonction supp_page. En effet, cette fonction inscript dedans le nom du fichier local (champ fichier dans la table Pict) de toutes les images qui ont été supprimées lors de la suppression de la page passée en argument.

Cette façon de procéder à plusieurs inconvéniens :

En fait, si nous avions pu réaliser des insertions d'image dans la base de données directement par des requêtes SQL (en utilisant les fonctions lo_import et lo_export), nous aurions stocké le code binaire des images directement dans la base de données et cette table n'aurait jamais existée.

Champs:
fichier - Le nom du fichier local contenant le code binaire de l'image supprimée.
See also:
supp_page
Sequence Detail

Site_id_site_seq

Séquence générant pour chaque site visité un identificateur unique.

See also:
Site

Page_id_page_seq

Séquence générant pour chaque page visitée un identificateur unique.

See also:
Page

Http_id_http_seq

Séquence générant pour chaque lien http visité un identificateur unique.

See also:
Http

MotHttp_id_mot_seq

Séquence générant pour chaque mot désignant un lien http un identificateur unique.

See also:
MotHttp

Mail_id_mail_seq

Séquence générant pour chaque adresse mail trouvée un identificateur unique.

See also:
Mail

MotMail_id_mot_seq

Séquence générant pour chaque mot associé à une adresse mail un identificateur unique.

See also:
MotMail

Pict_id_pict_seq

Séquence générant pour chaque image trouvée un identificateur unique.

See also:
Pict

MotPict_id_mot_seq

Séquence générant pour chaque mot associé à une image un identificateur unique.

See also:
MotPict
Function Detail

ins_http_url

INTEGER ins_http_url (INTEGER, TEXT, TEXT, INTEGER)
Fonction pour insérer un lien http d'après une chaine de caractères.

Cette fonction ne gère pas explicitement le contrôle des accès concurents. C'est a dire qu'elle ne verrouille aucune table.
Cela garantit des performance maximales puisque tous les processus peuvent accéder à n'importe quelle table à tout moment. Cependant, ce comportement pourrait porter atteinte à l'intégrité de la base de données. En fait, l'intégrité de la base de données est assurée par les triggers que Postgresql a créés pour assurés l'unicité de certains champs des tables (mot clef UNIQUE). Ainsi, en cas de collision entre deux processus l'une des transactions est annulée (voir la remarque ci-dessous) ; elle pourra être retentée plus tard.

Ce mécanisme suppose pour obtenir de bonnes performances que ces collisions sont rares. Ce qui reste bien sûr à démontrer mais qui semble à priori probable (de plus cela est confirmé dans la pratique (voir le fichier data/crawler.log.coll qui mémorise toutes les collisions)).

Cette méthode retourne l'identificateur du lien inséré. Celui-ci est soit un nouvel identificateur obtenu grâce à Http_id_http_seq si le lien n'éxistait pas déjà dans la base, soit l'identificateur que ce lien possédait déjà.

Remarques:


Parameters:
$1 - identificateur de la page dans laquelle le lien a été trouvé
$2 - url pointée par le lien
$3 - mot descriptif du lien
$4 - nombre de fois que ce lien est désigné par ce mot dans cette page
Returns:
l'identificateur du lien http
See also:
Http_id_http_seq

ins_http_id

INTEGER ins_http_id (INTEGER, INTEGER, TEXT, INTEGER)
Fonction pour insérer un lien de type http (vers une page webl) désigné par son identificateur passé en argument.

Cette fonction est identique à ins_http_url exceptée qu'elle est plus rapide. En effet, puisqu'on passe l'identificateur de ce lien http en paramètre cela signifie qu'il existe déjà dans la base de données. Donc la fonction ne le vérifie pas (contrairement à ins_http_url).

Pour plus d'information sur la gestion de la concurence lors d'une insertion voir ins_http_adr.

Parameters:
$1 - identificateur de la page dans laquelle le lien a été trouvé
$2 - identificateur du lien http
$3 - mot descriptif du lien
$4 - nombre de fois que ce lien est désigné par ce mot dans cette page
Returns:
l'identificateur du lien http
See also:
ins_http_url

ins_mail_adr

INTEGER ins_mail_adr (INTEGER, TEXT, TEXT, INTEGER)
Fonction pour insérer un lien de type mailto (vers une adresse mail) désigné d'après une chaine de caractères.

Cette fonction ne gère pas explicitement le contrôle des accès concurents. C'est a dire qu'elle ne verrouille aucune table.
Cela garantit des performance maximales puisque tous les processus peuvent accéder à n'importe quelle table à tout moment. Cependant, ce comportement pourrait porter atteinte à l'intégrité de la base de données. En fait, l'intégrité de la base de données est assurée par les triggers que Postgresql a créés pour assurés l'unicité de certains champs des tables (mot clef UNIQUE). Ainsi, en cas de collision entre deux processus l'une des transactions est annulée (voir la remarque ci-dessous) ; elle pourra être retentée plus tard.

Ce mécanisme suppose pour obtenir de bonnes performances que ces collisions sont rares. Ce qui reste bien sûr à démontrer mais qui semble à priori probable (de plus cela est confirmé dans la pratique (voir le fichier data/crawler.log.coll qui mémorise toutes les collisions)).

Cette méthode retourne l'identificateur de l'adresse insérée. Celui-ci est soit un nouvel identificateur obtenu grâce à Mail_id_mail_seq si l'adresse n'éxistait pas déjà dans la base, soit l'identificateur que cette adresse possédait déjà.

Remarques:


Parameters:
$1 - identificateur de la page dans laquelle le lien a été trouvé
$2 - adresse pointée par le lien
$3 - mot descriptif du lien
$4 - nombre de fois que ce lien est désigné par ce mot dans cette page
Returns:
l'identificateur du lien adresse mail
See also:
Mail_id_mail_seq

ins_mail_id

INTEGER ins_mail_id (INTEGER, INTEGER, TEXT, INTEGER)
Fonction pour insérer un lien de type mailto (vers une adresse mail) désigné par son identificateur passé en argument.

Cette fonction est identique à ins_mail_adr exceptée qu'elle est plus rapide. En effet, puisqu'on passe l'identificateur de cette adresse mail en paramètre cela signifie qu'elle existe déjà dans la base de données. Donc la fonction ne le vérifie pas (contrairement à ins_mail_adr).

Pour plus d'information sur la gestion de la concurence lors d'une insertion voir ins_mail_adr.

Parameters:
$1 - identificateur de la page dans laquelle le lien a été trouvé
$2 - identificateur de l'adresse pointée par le lien
$3 - mot descriptif du lien
$4 - nombre de fois que ce lien est désigné par ce mot dans cette page
Returns:
l'identificateur du lien adresse mail
See also:
ins_mail_adr

ins_pict_nom

INTEGER ins_pict_nom (INTEGER, INTEGER, TEXT, TEXT, TEXT, TEXT, INTEGER)
Fonction pour insérer un lien de type img (vers une image) désigné par le chemin de l'image, son nom et le nom du fichier contenant son code binaire.

Cette fonction ne gère pas explicitement le contrôle des accès concurents. C'est a dire qu'elle ne verrouille aucune table.
Cela garantit des performance maximales puisque tous les processus peuvent accéder à n'importe quelle table à tout moment. Cependant, ce comportement pourrait porter atteinte à l'intégrité de la base de données. En fait, l'intégrité de la base de données est assurée par les triggers que Postgresql a créés pour assurés l'unicité de certains champs des tables (mot clef UNIQUE). Ainsi, en cas de collision entre deux processus l'une des transactions est annulée (voir la remarque ci-dessous) ; elle pourra être retentée plus tard.

Ce mécanisme suppose pour obtenir de bonnes performances que ces collisions sont rares. Ce qui reste bien sûr à démontrer mais qui semble à priori probable (de plus cela est confirmé dans la pratique (voir le fichier data/crawler.log.coll qui mémorise toutes les collisions)).

Cette méthode retourne l'identificateur du lien inséré. Celui-ci est soit un nouvel identificateur obtenu grâce à Pict_id_pict_seq si le lien n'éxistait pas déjà dans la base, soit l'identificateur que ce lien possédait déjà.

Remarques:


Parameters:
$1 - identificateur du site contenant cette image
$2 - identificateur de la page dans laquelle un lien vers l'image a été trouvé
$3 - nom du fichier de l'image dans le site (sur le serveur distant)
$4 - chemin absolu du fichier de l'image depuis la racine du site
$5 - nom du fichier local où le code binaire de l'image a été stockée
$6 - mot descriptif du lien
$7 - nombre de fois que ce lien est désigné par ce mot dans cette page
Returns:
l'identificateur de l'image si elle n'existait pas avant.
- l'identificateur de l'image si elle existait déjà avant (cela permet d'avertir le processus de navigation qui a appelé la fonction qu'il peut supprimer le fichier contenant le code binaire de l'image qu'il avait créé).
See also:
Pict_id_pict_seq

ins_pict_id

INTEGER ins_pict_id (INTEGER, INTEGER, TEXT, INTEGER)
Fonction pour insérer un lien de type img (vers une image) désigné par son identificateur passé en argument.

Cette fonction est identique à ins_pict_nom exceptée qu'elle est plus rapide. En effet, puisqu'on passe l'identificateur de cette image en paramètre cela signifie qu'elle existe déjà dans la base de données. Donc la fonction ne le vérifie pas (contrairement à ins_pict_nom).

Pour plus d'information sur la gestion de la concurence lors d'une insertion voir ins_pict_nom.

Parameters:
$1 - identificateur de la page dans laquelle le lien a été trouvé
$2 - identificateur de l'image pointée par le lien
$3 - mot descriptif du lien
$4 - nombre de fois que ce lien est désigné par ce mot dans cette page
Returns:
l'identificateur du lien adresse pict
See also:
ins_pict_nom

supp_page

INTEGER supp_page (INTEGER)
Supprime la page dont l'identificateur est passé en argument.

Lorsqu'une page est supprimée (parcequ'elle n'est plus accessible sur le web), on supprime également tous les liens (http, mail et image) qui n'ont été trouvé que dans cette page ainsi que tous les mots ne désignant que ces liens.

Parameters:
$1 - l'identificateur de la page a supprimer.
Returns:
Le nombre de liens et/ou mots supprimés avec la page..