Architecture Base de données

Eric -  
 Eric -
Bonjour, voila une architecture au sein d'une application qui decrit le mode d'appel à sa
base de données:
Base de données Versant - serveur d'application - serveur Web - browser web

Je voudrais en fait savoir qui fait quoi las dedans?
- Que fait le serveur d'application?
- quels sont les types d'echange que l'on peut trouver entre les 2 serveurs?
- a quoi peuvent servir des servlets sur le serveur web?

Si vous avez une idées...
A voir également:

2 réponses

Abdelhafid NACIR
 
Versant : un langage objet persistant
Présentation
VERSANT est un système de gestion de base de données orientées objets développé et commercialisé par la société Versant Object Technology Corporation. VERSANT offre la persistance et des facilités de gestion de base de données pour des objets C++. Une interface de bas niveau permet également la définition de classes et d'objet à partir du langage C. Versant est un représentant typique d'un langage objet persistant.

Architecture générale
C'est une architecture distribuée en environnement hétérogène. Des clients pouvant posséder une ou plusieurs bases personnelles, accèdent via le réseau a un ou plusieurs serveurs contrôlant des bases de groupe (voir See Architecture générale de Versant. ).

Architecture générale de Versant

Modèle de données
Modèle objet
Versant utilise les objets du langage C++ [Stroustrup 86] auxquels ont été ajouté des extensions permettant de gérer la persistance. Le schéma de la base est directement dérivé de la définition des classes en C++.

Identité
Versant permet de gérer un nombre important de bases de données (2^16 bases). Un identifiant d'objet est alors formé d'une paire : <Numéro de base | Numéro de l'objet>. L'identifiant dépend donc directement de l'identifiant de la base de données. Il est néanmoins possible de faire migrer les objets de façon transparente entre bases

Persistance
La persistance est obtenue à la fois par héritage de la classe persistante PObject et par surcharge de l'opérateur new. Il est alors possible de définir des objets persistants et des objets temporaires. Un objet instance d'une classe dérivant de PObject peut être :

- temporaire Point* pt = new Point();
- persistent Point* pt = new Persistent Point();

Relations
VERSANT offre un certain nombre de types d'attributs simples :
o_1b, o_2b, o_4b n-octets signes
o_u1b, o_u2b, o_u4b n-octets non signes
o_float, o_double nombres flottants en simple et double précision
o_bool valeurs booléennes

VERSANT offre également un certain nombre de types de relations entre objets :
Link<X> référence a une instance de la classe persistante X
LinkVstr<X> tableau dynamique de références à des instances de la classe
persistante X
BiLink<X,A> référence bidirectionnelle à une instance de la classe persistante X
BiLinkVstr<X,A> tableau dynamique de références bidirectionnelle à des instances de la
classe persistante X
Avec
X : nom d'une classe dérivant de PObject
A : nom de l'attribut du pointeur inverse dans la classe X

Versant propose également en standard plusieurs librairies de classes permettant de gérer différents types de collections d'objets :
Container collection ordonnée d'objets hétérogènes
La classe container permet la lecture et l'écriture de son contenu en une seule opération sur le serveur.
V?Set ensemble non ordonné d'éléments de même type
V?List liste ordonnée d'éléments de même type
V?Array tableau d'éléments de même type
V??Dictionary table de correspondance "lookup table"

Avec ? =
E : collection de types élémentaires
I : Identité, références à des objets persistants comparés par leur identité
V : Valeur, références à des objets persistants comparés par leur contenu

Pour chaque type de collection est associé un itérateur permettant de parcourir les éléments de la collection.

Gestion de la mémoire
Versant permet une gestion fine de l'utilisation de la mémoire au niveau du cache objet. Il est possible de spécifier le seuil au dessus duquel les objets présents dans le cache seront déchargés ("swapé") sur disque lorsque leur nombre devient trop important. Il est également possible a contrario d'indiquer que l'on désire conserver certains objets en mémoire par un mécanisme de type pin/unpin.

Gestion des exceptions
Le traitement des erreurs au niveau de VERSANT est basé sur le gestionnaire d'exceptions du langage C++ :

(1) Une erreur est levée "thrown" dans un bloc "try block" de code.
(2) Un autre bloc "catch block" capture l'erreur et peut soit la traiter soit la repasser "rethrow".
(3) Si une erreur n'est pas traitée dans le bloc courant, elle est remontée dans le bloc "try" directement supérieur.

Gestion des versions
Versant fournit un mécanisme de bas niveau pour la gestion de versions d'objets. Il permet de gérer pour chaque objet un graphe de versions. Ce mécanisme a pour granularité l'objet, c'est-à-dire que chaque version est un nouvel objet (avec une nouvelle identité). Ce système ne permet pas à lui seul de faire de la gestion de configuration.

Stockage des données
Architecture du système de stockage
L'architecture générale est de type serveur d'objets.

Mécanismes de reprise sur panne
La reprise sur panne s'effectue par utilisation de journaux logiques et physiques.

Requêtes
Versant permet de faire des requêtes simples par prédicat sur des valeurs d'attributs.

Exemple: rechercher tous les pièces de classe vitale qui ont été validées dans la base "PieceCompo".

// definition du predicat de selection
PPredicate pred =
PAttribute("Piece::classe_")==VITALE &&
PAttribute("Piece::validation_")==true;
//execution de la requete, on recupere une liste d'identifiant d'objets
LinkVstr<Piece> pieceList =

PClassObj<Piece>.select("PieceCompo", FALSE, pred);

Il est également possible de faire des requêtes plus complexes avec parcourt de liens récursif. On peut faire des requêtes du type : rechercher tous les pièces ayant été validées par l'utilisateur dont le nom est "toto".

Le serveur connaisant la sémantique des objets (leur schéma), les requêtes sont évaluées au niveau du serveur, évitant ainsi tout trafic inutile entre le client et le serveur.

Indexation
Pour améliorer les performances des requêtes, il est possible de construire des index sur certains attributs. Ces index peuvent être créés et détruits à l'exécution sans aucune modification du schéma.

Création et destruction d'index sur des attributs
PClass::createindex(<nomAttribut>, <typeIndex>, <nomBD>);
PClass::deleteindex(<nomAttribut>, <typeIndex>, <nomBD>);
On peut spécifier deux types d'index :
O_IT_BTREE : indexation par arbre binaire (ordonnée)
O_IT_HASH : indexation par table de hash (non ordonnée)

Exemple: PClassObj<piece>.createindex("Piece::numero",O_IT_BTREE,"BDpiece");

Contrôle de concurrence
Transactions
Pour permettre le travail coopératif en environnement distribué, Versant offre deux grand types de transactions.
Les transactions courtes : utilisées lorsque l'on manipule des objets sur de courtes durées.
Les transactions longues : utilisées lorsque l'on doit manipuler des objets sur des durées plus longues (des heures ou des jours).

Lors de l'utilisation de transactions courtes, il est possible de poser des points de reprise (savepoints), et d'utiliser des transactions imbriquées (nested transactions), permettant ainsi d'implanter facilement des mécanismes de type faire/défaire (do/undo).

Les transactions longues se font par l'utilisation d'un mécanisme de check-out/check-in.

Check-out

Un check-out copie des objets depuis une base de groupe vers une base privée de façon atomique (le check-out se fait dans le cadre d'une transaction courte) et en gérant les accès concurents par pose de verrous persistants sur les objets dans la base de groupe. Le mécanisme de check-out copie également si besoin est les classes (le schéma) dans la base privée.
Le check-out peut se faire suivant trois modes de verrouillage : read, write ou snapshot.

Comportement des objets non versionnés
Lorsque des objets non versionnés sont chargés dans une base locale par un check-out avec des verrous en lecture ou en écriture, il sont copiés dans cette base locale mais ils conservent la même identité. Des verrous persistant sont alors posés sur les objets originaux dans la base de groupe.

Lorsque des objets non versionnés sont chargés dans une base locale par un check-out avec des verrous de type snapshot, il sont dupliqués dans la base locale sous une nouvelle identité.

Comportement des objets versionnés
Lorsque des objets versionnés sont chargés dans une base locale par un check-out, une nouvelle version (avec une nouvelle identité) est crée dans la base locale. Il n'y a alors pas pose de verrous dans la base de groupe, et les objets restent disponibles pour d'autres utilisateurs.

Group check-out
Il est également possible de faire des group check-out, c'est-à-dire de copier des objets entre bases de groupe. Ces group check-out ne peuvent se faire qu'en lecture seule (en posant des verrous persistants de type read), et permettent de dupliquer des objets sur plusieurs sites.

Check-in
Le mécanisme inverse du check-out est le check-in. Il peut être explicite, ou implicite par fin de la transaction longue. Une transaction longue peut se terminer soit par une annulation (rollback) soit par une validation (commit). De même que le check-out, le check-in est une opération atomique. Dans tous les cas, les objets lus par un check-out, retrournent dans leur base d'origine à la fin du check-in.
Une annulation restore l'état antérieur de la base de groupe et libère tous les verrous persistants posés sur les objets lors du check-out.

Comportement des objets non versionnés
Les objets verrouillés en écriture remplacent les objets initiaux dans la base de groupe.
Les objets verrouillés en lecture sont ignorés (les objets initiaux sont conservés)
Les objets lus en mode snapshot, ou de nouveaux objets crées, ne sont écrits dans la base de groupe que par un check-in explicite.

Comportement des objets versionnés
Les objets versionnés lus en base privée correspondent à de nouveaux objets, ceux-ci ne sont écrits dans la base de groupe que par un check-in explicite.

Gestion des accès concurrents
Versant propose trois grands types de verrous
- Verrous courts : ils sont utilisés pour verrouiller des objets durant une transaction courte.
- Verrous intensionnels (intention lock) : ils sont utilisés pour le verrouillage des classes du schéma. Ils agissent de la même façon que des verrous courts normaux, mais ils ne sont pas bloquants entre eux.
- Verrous persistants : les verrous persistants sont des verrous posés durant une longue période et pouvant survivre à une panne.

Notification
Versant propose deux mécanismes de notifications : un au niveau de la gestion des verrous, l'autre au niveau de la gestion de versions et du système de checkin/checkout.

Notification d'événement de verrouillage
O_PL_LOCK_BROKEN le verrou vient de sauter
O_PL_REQ_PENDING mise en attente d'une requête de verrouillage
O_PL_OBJ_READY un objet réservé est maintenant disponible

Notifications d'événement au niveau d'un objet
Il est possible de demander au serveur une notification sur les changements d'état de certains objets.
O_VSN_CREATION création d'une version fille de l'objet
O_OBJ_READ lecture de l'objet par un checkout
O_OBJ_UPDATE mise à jour de l'objet par un checkin

Administration de la base de données
Confidentialité et sécurité
Versant utilise le système de protection des fichiers UNIX.
9
Eric
 
Merci enormement pour ta reponse!
0