5.2 Le virage du NoSQL
5.2.2 Le changement de paradigme en action
Le stockage des données d’une base de données s’effectue au sein de tables de ha-chage, ou « maps » permettant une association entre une clé et une valeur sous forme d’objets Java™ ( ™). Cette structure de données ne permet pas de définir de schéma de manière ana-logue aux SGBDRs. Afin de conserver la structuration générique de l’information définie par le modèle de données décrit dans précédement, un Plain Old Java Object (POJO)3 a été définie pour chaque table du MLD (Figure 5.2). La liste de ces tables est donnée Table 5.2. Ces dernières permettent de stocker, au niveau applicatif, le contenu des tables auxquelles ils se rapportent. Chaque tuple d’une table pouvant être, intégralement et identiquement structuré, stocké dans une instance de la classe ™associée à cette table (i.e. chaque classe ™ possède un attribut pour chaque colonne de la table à laquelle cette classe se rapporte). Dans leur ensemble, ces ob-jets permettent donc de reproduire l’intégralité de l’information du modèle logique de données en préservant ainsi la modélisation conceptuelle de cette dernière.
Tables POJO
TB_OBJECT DBObject.java
TB_DATATYPE_PROPERTY DatatypeProperty.java TB_OBJECT_PROPERTY ObjectProperty.java
TB_INDEXING Indexing.java
TB_HIERARCHY Hierarchy.java
TB_MODEL Model.java
TB_MODEL_DATATYPE_PROPERTY ModelDatatypeProperty.java TB_MODEL_OBJECT_PROPERTY ModelObjectProperty.java TB_MODEL_INHERITANCE ModelInheritance.java
Table 5.2 – Correspondance entre les tables du modèle physique de données générique et les Classes
™qui en permettent leurs représentations au niveau applicatif.
1. : « Grille de Données en Mémoire » 2. : « code Source Ouvert »
Ces POJOs sont construits à partir des données présentes dans le SGBDR de l’EDS. Ils sont ensuite insérés et maintenus au sein de la base de données à l’aide d’un SGBD spécifique appelé NINJAC Is Not Just A Cache (NINJAC) qui organise les accès à au sein du SI du . Les POJOs de type DBObject et Model possèdent la parti-cularité de pouvoir stocker (i.e. d’imbriquer) la liste des POJOs qui les concernent. Ainsi, un
DBObject représentant conceptuellement un objet quelconque, permet éventuellement, si celui-ci a été préalablement complété, d’accéder directement à liste des attributs (i.e. la liste des
DatatypeProperty) et des relations dans lesquelles cet objet conceptuel est impliqué (i.e. la liste de ObjectPropertyet/ouIndexing et/ouHierarchy). Il est néanmoins possible d’accéder aux PO-JOs DatatypeProperty,ObjectPropertyet Hierarchysans nécessairement passer par le DBObject auquel il se rapporte. En revanche, le POJO Model est lui systématiquement complété avec les POJOs ModelDatatypeProperty,ModelObjectPropertyetModelInheritancequi le concerne. Ainsi, du coté applicatif, la partie modèle du MLD est intégralement maintenue par l’ensemble des POJOs Model.
, tout comme les solutions NoSQL de type clé-valeur d’une manière générale, ne fournit pas de mécanisme permettant de définir de modèle de données à proprement parler. Par conséquent, le modèle de données peut être vu comme résultant de la conjonction entre l’ensemble des maps constituant la base d’une part et la structure des POJOs servant comme clés et valeurs dans ces dernières d’autre part. La Table 5.3 donne la liste des maps utilisées par le SI. Quant à la structure des objets utilisés comme clé et valeur, elle est héritée de la structure des tables du MLD.
Le système de gestion NINJAC permet principalement d’alimenter les maps de ce modèle et de mettre à disposition des méthodes permettant d’en extraire les POJOs de manière basique à partir des clés ou de manière un peu plus évoluée en complétant par exemple les DBObject avec les DatatypeProperty, ObjectProperty, Indexing et Hierarchy qui les concernent. Ce modèle est notamment composé de cinq « caches d’entité » donnant accès aux cinq POJOs destinés à la représentation de la partie donnée du MLD et d’un cache destiné à la partie modèle : le cache d’objets donnant accès auxDBObject, le cache d’attributs donnant accès auxDatatypeProperty, les caches de relations, d’indexations et de subsomptions donnant respectivement accès aux
ObjectProperty,Indexing etHierarchyet enfin le cache de modèle en charge de la représentation de la partie modèle du MLD. Les autres caches de la Table 5.4 sont des « caches système » qui servent davantage au fonctionnement interne de NINJAC et sont plus rarement exploités par des applications tierces requérant de l’information.
Cache d’objets
Retrouver un objet à partir de son identifiant
"RDF_RESOURCE" −→ DBObject
identifiant d’un objet. Instance ™ deDBObject représentant l’objet ayant
pour identifiant "RDF_RESOURCE".
Cache d’attributs
Retrouver les attributs d’un objet à partir de l’identifiant de ce dernier. "RDF_RESOURCE" −→ h DatatypePropertyi
identifiant d’un objet. Liste des instances ™ de DatatypeProperty
représentant les attributs de l’objet
d’identi-fiant "RDF_RESOURCE" définit dans la table TB_DATATYPE_PROPERTY.
Cache de relations
Retrouver une relation à partir de l’identifiant de son objet source. "RDF_RESOURCE_SOURCE" −→ h ObjectPropertyi
identifiant d’un objet source d’une relation.
Liste des instances ™ de ObjectProperty représen-tant les relations de la table TB_OBJECT_PROPERTY
dont l’objet source a pour identifiant
"RDF_RESOURCE_SOURCE".
Cache d’indexations
Retrouver une relation d’indexation à partir de l’identifiant de l’objet indexé. "RDF_RESOURCE_INDEXED" −→ h Indexingi
identifiant d’un objet source d’une relation d’indexation.
Liste des instances ™ de Indexing représentant les relations de la table TB_INDEXING dont l’objet indexé a pour identifiant "RDF_RESOURCE_INDEXED".
Cache de subsomptions
Retrouver une relation hiérarchique à partir de l’identifiant de l’objet père. "RDF_RESOURCE_BROADER" −→ h Hierarchyi
identifiant d’objet source d’une relation hiérarchique.
Liste des instances ™ de Hierarchy
représen-tant les relations de subsomption de la table
TB_HIERARCHY dont l’objet père a pour identifiant "RDF_RESOURCE_BROADER".
Cache de modèles
Retrouver un type à partir de son libellé.
"TYPE_ID" −→ Model
identifiant d’objet source d’une relation hiérarchique.
instance ™ de Model représentant ce type d’objet, d’attribut, de relation ou ce type abstrait (et ayant donc "TYPE_ID"pour libellé).
Légende :
“xxx” Chaîne de caractère contenant le texte xxx. Class instance de la classe Class.java
[X] Collection ordonnée d’éléments de type X.
{X} Collection non ordonnée et sans doublons d’éléments de type X.
Table 5.3 – Liste des caches de données du SI NoSQL du . Pour chaque Map : Cl´e →
Cache d’identifiants
Retrouver les identifiants des objets d’un type donné. "TYPE_ID" −→ {"RDF_RESOURCE"}
Libellé d’un type
d’ob-jet contenu dans la table TB_OBJECT.
Ensemble des identifiants des objets de ce type "TYPE_ID".
Cache de types
Retrouver le libellé du type d’un objet.
"RDF_RESOURCE" −→ "OBJECT_TYPE_ID" identifiant d’objet contenu
dans la table TB_OBJECT.
type de l’objet ayant cet identifiant "RDF_RESOURCE".
Table 5.4 –Liste des saches système du SI NoSQL du .