Version Managed Data Store
Le Version Managed Data Store, ou VMDS, est une technologie de gestion de base de données relationnelles, développée par Smallworld Systems à la fin des années 1980, 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.
Avec la gestion de Miki les bons tuyaux.
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
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
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
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, ici, 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()
Liens externes
- Smallworld product suite, GE Energy
- Les publications techniques originelles (en anglais) des fondateurs de Smallworld
- Le blog (en anglais) d'Alfred Sawatsky