VMDS

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

VMDS est une abréviation pour Version Managed Data Store. Cette technologie de gestion de base de données relationnelles, développée par Smallworld Systems Ltd à la fin des années 80, est aujourd'hui supportée par GE Energy, au sein du Système d'information géographique (SIG) Smallworld. Cette technologie a été conçue pour permettre de gérer les volumes importants nécessités par un système d'information géographique continu, ainsi que pour permettre de gérer le problème des transactions longues (cf article DN).

Introduit en 1990, VMDS a évolué au fil du temps. La version actuelle est 6.0

VMDS est un SGBD spatial. Il offre donc un ensemble de caractéristiques qui le différencient des SGBD relationnels destinés à ne stocker que des attributs alphabétiques ou numériques plus traditionnels.


VMDS se décompose en deux parties : un serveur de blocs simple et puissant en termes d'échelle, appelé SWMFS (Smallworld Master File Server), et une API cliente intelligente, écrite en C et en [Magik]. Les attributs spatiaux ou non sont stockés dans des blocs qui résident dans des fichiers sur le serveur. Lorsque l'application cliente requiert des données, elle est suffisamment intelligente pour déterminer l'ensemble optimal de blocs qui est nécessaire. La requête est ensuite transmise à SWMFS qui renvoie les données au client via le réseau pour traitement.

Cette approche est particulièrement efficace et évolutive lorsqu'on doit traiter des données spatiales et/ou topologiques, qui tendent à circuler en volumes plus grands et à nécessiter plus de traitements que les attributs alphanumériques classiques (par exemple lors du rafraîchissement du dessin d'une carte). Cette approche fait de VMDS une solution particulièrement bien adaptée aux déploiements qui peuvent être utilisés par plusieurs centaines, voire plusieurs milliers d'utilisateurs concurrents.

Support des transactions longues[modifier | modifier le code]

Les SGBD relationnels supportent des transactions courtes, dans lesquelles les changements de données sont relativement petits en volume et dont la mise à jour est courte en durée. La durée maximale entre le début et la fin d'une transaction est au maximum de quelques secondes, et souvent beaucoup moins.

VMDS supporte les transactions longues, dans lesquelles le volume de données et la durée peuvent être significatifs (des jours, des semaines, voire des mois). Ces types de transaction sont communs dans les applications de cartographie ou de gestion de réseaux complexes.

À cause de la durée des transactions dans ce contexte, le volume de données changé peut être important (pas seulement dans le contexte de la transaction, mais aussi parfois dans celui de la base de données dans son ensemble). En conséquence, il est probable que le même enregistrement soit changé plus d'une fois, par des utilisateurs différents. Pour faire face à cette situation, VMDS offre nativement des solutions de gestion automatique de conflits, et permet aux applications de revoir et éventuellement annuler les modifications incorrectes.

Capacité spatiale et topologique[modifier | modifier le code]

En plus des fonctionnalités classiques d'un SGBD relationnel, comme l'interrogation des attributs, les jointures, triggers et champs calculés, VMDS offre de nombreuses fonctionnalités spatiales et topologiques. Ceci permet de stocker et d'interroger, en tant que types d'attributs, des points, des textes, des polylignes, des polygônes et des images tramées (rasters).

Les fonctions spatiales incluent, par exemple : trouver tous les points dans un polygone, calculer les polygones de Voronoi depuis les points d'un TIN (réseau triangulé irrégulier), faire une analyse de type cluster d'un ensemble de points

Les données vectorielles, comme les points, les polylignes et polygones peuvent être associées à des attributs topologiques qui permettent de modéliser des réseaux complexes. Des moteurs d'analyse de réseau sont fournis pour répondre à des requêtes comme "trouver le plus court chemin entre deux nœuds du réseau", ou optimiser une route de livraison (problème du voyageur de commerce). Un moteur topologique peut être configuré avec un ensemble de règles qui définit comment les entités topologiques interagissent les unes avec les autres lorsque des données sont ajoutées, ou lorsque les données existantes sont modifiées.

Représentation des données[modifier | modifier le code]

Dans VMDS, les données sont présentées à l'application en tant qu'objets. Ceci est différent de nombreux SGBD relationnels du marché, qui présentent les données en tant que lignes d'une table ou résultat de requête JDBC. VMDS fournit dans la plateforme Smallworld un atelier de génie logiciel et une infrastructure qui permet aux administrateurs d'associer une table avec une classe d'objet défini en Magik. Les méthodes de lecture et d'écriture des attributs sont générées automatiquement, et permettent d'exposer les attributs de l'enregistrement. Chaque enregistrement (rangée) d'une table se manifeste ainsi à l'application en tant qu'instance d'une classe Magik, et est connu comme un RWO (Real World Object - ou objet du monde réel). Les tables sont appelées collections.

 # tous_les_rwos contient tous les objets (RWOs) de la base. Il s'agit d'un ensemble hétérogène
 tous_les_rwos << mon_application.rwo_set()
 # les_vannes contient la table "vanne"
 les_vannes << tous_les_rwos.select(:collection, {:vanne})
 number_of_valves << valves.size

Les requêtes sont construites au moyen de prédicats:

 # Trouver les vannes ouvertes
 vannes_ouvertes << vannes.select(predicate.eq(:statut_operationnel, "ouvert"))
 nombre_de_vannes_ouvertes << vannes_ouvertes.size
 _for une_vanne _over vannes_ouvertes.elements()
 _loop
   write(une_vanne.id)
 _endloop

Les jointures sont implémentées en tant que méthodes sur l'objet parent. Par exemple un gestionnaire pourrait avoir plusieurs employés dans son équipe :

 # Récupérer la table des employés
 les_employes << mon_application.database.collection(:gis, :employe)
 # Trouver un gestionnaire dont le nom est "Robert" (en fait, içi, le premier dont le 
 # nom est "Robert")
 robert << employes.select(
   predicate.eq(:name, "Robert").and(predicate.eq(:role,"gestionnaire")).an_element()
 # Afficher le nom des membres de son équipe. "nom" est un attribut de la table employe.
 _for un_employe _over robert.membre_equipe.elements() # membres_equipe est un champ de jointure
_loop
  write(un_employe.nom)
_endloop

Effectuer une transaction:

 # Chaque clé dans la hash table correspond au nom d'un attribut de la table
 donnees_vanne << hash_table.new_with(
   :asset_id, 57648576,
   :materiau, "Fer")
 # Récupérer la table des vannes
 les_vannes << mon_application.database.collection(:gis, :vanne)
 # Créer une transaction pour insérer un nouvel enregistrement dans la table des vannes
 # Un commentaire peut être associé à la transaction pour la décrire.
 ma_transaction << record_transaction.new_insert(les_vannes, donnees_vanne, 
   "J'ai inséré une nouvelle vanne")
 ma_transaction.run()

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]