Extensible Storage Engine
Extensible Storage Engine (abr. ESE), aussi appelé Jet Blue est un moteur de base de données créé par Microsoft en 1996. Il est incorporé dans les systÚmes d'exploitation de la série Windows NT et utilisé par les produits Active Directory et Exchange Server[2].
Développé par | Microsoft |
---|---|
DĂ©pĂŽt | github.com/microsoft/Extensible-Storage-Engine |
Environnement | Windows |
Formats lus | Extensible Storage Engine DataBase (d) |
Formats Ă©crits | Extensible Storage Engine DataBase (d) |
Type | Moteur de base de données |
Licence | Licence MIT[1] |
Site web |
Il s'agit d'une bibliothĂšque logicielle qui manipule des bases de donnĂ©es selon la mĂ©thode sĂ©quentielle indexĂ©e (ISAM). Elle met en Ćuvre des mĂ©canismes qui permettent de rĂ©aliser des transactions atomiques, cohĂ©rentes, isolĂ©es et durables (ACID) ainsi que des mĂ©canismes de mĂ©moire cache, de verrou et de journal (anglais log) en vue d'assurer la sĂ©curitĂ© et la performance des opĂ©rations sur les bases de donnĂ©es.
Extensible Storage Engine est utilisé sur des bases de données dont la taille va de 1 mégaoctet à plus de 1 téraoctet[2].
Histoire
Le développement du produit a commencé en 1996, il était initialement appelé Jet Blue (JET pour Joint Engine Technology), en référence à son concurrent Jet Red, le moteur de base de données de Microsoft Access. Puis a été renommé Extensible Storage Engine parce que les deux produits ont une programmation différente, une histoire différente, des fonctionnalités différentes et ne sont pas interchangeables[2] - [3].
il existe deux versions ESE97 et ESE98, en référence à leur année de sortie. La version ESENT, basée sur ESE97, est utilisée pour le service d'annuaire Active Directory[3].
Fonctionnalités
Extensible Storage Engine s'utilise par appel des fonctions de son interface de programmation. Cette interface offre la possibilité d'enregistrer des données dans des tables, puis de les retrouver en utilisant des index et des curseurs. L'atomicité, la cohérence, l'isolation et la durabilité des modifications des données et des métadonnées effectuées de maniÚre concurrente sont assurées par des transactions[2].
Extensible Storage Engine est équipé d'un mécanisme de mémoire cache, qui lit le contenu de la base de données à l'avance, et écrit avec retard, ce qui accélÚre les opérations[4].
Par le mĂ©canisme de concurrence multi-versions, un logiciel qui lit le contenu de la base de donnĂ©es durant une transaction verra le contenu de la base de donnĂ©es dans l'Ă©tat oĂč il Ă©tait au moment oĂč la transaction a dĂ©marrĂ©. Les modifications ultĂ©rieures effectuĂ©es dans d'autres transactions ne seront pas visibles. Extensible Storage Engine annulera la transaction si des modifications viennent recouvrir d'autres modifications effectuĂ©es entre-temps dans d'autres transactions[5].
Extensible Storage Engine manipule les fichiers de base de donnĂ©es situĂ©es sur l'ordinateur. Les fichiers peuvent Ă©galement ĂȘtre placĂ©s sur un autre ordinateur et manipulĂ©s par l'intermĂ©diaire d'un systĂšme de fichiers distribuĂ©, cette utilisation est cependant dĂ©conseillĂ©e par le fabricant[2].
Base de données
Les fichiers de base de donnĂ©es de Extensible Storage Engine sont faits d'un ensemble de pages de taille fixe de 4 ou 8 kilooctets - La taille des pages est dĂ©terminĂ©e Ă la crĂ©ation du fichier. Les pages sont reliĂ©es entre elles sur une structure en arbre B et contiennent une somme de contrĂŽle (anglais checksum) qui permet de dĂ©celer d'Ă©ventuelles erreurs. Les pages contiennent les donnĂ©es, ainsi que les mĂ©tadonnĂ©es du schĂ©ma et les index[2]. Les pages sont crĂ©Ă©es Ă mesure que des donnĂ©es sont ajoutĂ©es Ă la base de donnĂ©es. Si une page commence Ă ĂȘtre pleine, Extensible Storage Engine scinde celle-ci en deux, crĂ©e une nouvelle page et adapte l'arbre B[5].
Chaque base de données est composée d'un fichier principal, éventuellement accompagné de fichiers temporaires contenant les transactions, les index et le journal des opérations[2]. Extensible Storage Engine crée automatiquement des index et ceux-ci sont automatiquement supprimés s'ils n'ont pas été utilisés durant 8 jours[5].
les tables dans les bases de donnĂ©es ESE peuvent avoir une organisation non orthogonale, avec des champs qui ne sont pas prĂ©sents dans tous les lignes de la table et des champs multi-valeurs. Les champs des enregistrements peuvent ĂȘtre de diffĂ©rents types de donnĂ©es, y compris monĂ©taire, date, GUID, CLOB ou BLOB[5].
Chaque copie de Extensible Storage Engine peut manipuler jusqu'à 6 bases de données à la fois. Chaque processus utilisant ESE peut avoir jusqu'à 1024 copies de ESE.
Une base de donnĂ©es peut ĂȘtre dĂ©tachĂ©e d'une instance ESE en cours pour ĂȘtre attachĂ©e ensuite Ă la mĂȘme instance ou Ă une instance diffĂ©rente. Pendant qu'elle est dĂ©tachĂ©e, une base de donnĂ©es peut ĂȘtre copiĂ©e en utilisant des utilitaires Windows standards.
Tables
La quantité d'espace de disque allouée à une table au sein d'une base de données est déterminée par un paramÚtre donné lorsque la table est créée avec l'opération CreateTable. Les tables croissent automatiquement en réponse à la création de données (enregistrement).
Les tables ont au minimum un index. Il doit y avoir au moins un index de cluster pour les données d'enregistrement. Lorsqu'il n'y a pas d'index de cluster défini par l'application, un index artificiel est utilisé qui ordonne et groupe les enregistrements par ordre chronologique d'insertion d'enregistrement.
Les index sont reprĂ©sentĂ©s en utilisant des arbres B+. ESE possĂšde une fonctionnalitĂ© de compactage en-ligne qui re-compacte les donnĂ©es. Si une table devrait ĂȘtre frĂ©quemment mise Ă jour, de l'espace peut lui ĂȘtre rĂ©servĂ© pour des insertions futures en spĂ©cifiant une densitĂ© de page appropriĂ©e lors de la crĂ©ation d'une page ou d'un index.
Enregistrements et colonnes
La taille maximale d'un enregistrement est de 8 110 octets pour des pages de 8 kilooctets avec l'exception des colonnes Ă longue valeur. Les types des colonnes "LongText" et "LongBinary" peuvent contenir des donnĂ©es d'une taille bien plus large que la taille de page de base de donnĂ©es. Ces donnĂ©es "long values" peuvent elles-mĂȘmes faire jusqu'Ă 2 gigaoctets en taille.
Les enregistrements sont typiquement uniformes dans le fait que chaque enregistrement a un ensemble de valeurs pour le mĂȘme ensemble de colonnes. Dans ESE, il est aussi possible de dĂ©finir un grand nombre de colonnes pour une table, et de n'en avoir que quelques-unes de remplies de valeurs non nulles pour certains enregistrements. De mĂȘme, une table peut aussi ĂȘtre une collection d'enregistrements hĂ©tĂ©rogĂšnes.
ESE offre le support pour un large panel de valeurs de colonnes, allant en taille du bit seul jusqu'à des valeurs de 2 gigaoctets. Faire le choix des types de colonnes corrects est important parce que le type de la colonne détermine beaucoup de ses propriétés, incluant son ordonnancement pour les index. Voici la liste des types ayant un support dans ESE :
Types de colonnes
Nom | Description |
---|---|
Bit | valeur ternaire (NULL, 0, ou 1) |
Octet non signé | entier non signé sur 1 octet |
court ("Short") | entier signé codé sur 2 octets |
Court non signé | entier non signé sur 2 octets |
Long | entier signé sur 4 octets |
Long non signé | entier non signé sur 4 octets |
Long Long | entier signé sur 8 octets |
Monnaie | entier signé sur 8 octets |
IEEE Single | Nombre Ă virgule flottante sur 4 octets |
IEEE Double | Nombre Ă virgule flottante sur 8 octets |
Temps / Date | Date ou temps codé sur 8 octets (date intégrale, temps fractionnel) |
GUID | identifiant unique sur 16 octets |
Binaire | chaĂźne binaire, de longueur â 255 octets |
Texte | chaĂźne de caractĂšre ANSI ou Unicode de longueur â 255 octets |
Binaire long | ChaĂźne binaire de grande taille de longueur < 2 gigaoctets |
Texte long | ChaĂźne de caractĂšres de grande taille ANSI ou Unicode de longueur < 2 gigaoctets |
Colonnes fixes, variables et marquées
Chaque table ESE peut définir jusqu'à 127 colonnes de longueur fixe, 128 colonnes à longueur variable et 64.993 colonnes marquées.
Les colonnes fixes sont essentiellement des colonnes qui prennent la mĂȘme quantitĂ© de mĂ©moire pour chaque enregistrement, quelle que soit leur valeur. Les colonnes fixes utilisent 1 bit pour reprĂ©senter une valeur nulle (NULL) et une quantitĂ© de mĂ©moire fixe pour chaque enregistrement.
Les colonnes variables utilisent 2 octets pour déterminer une valeur nulle (NULL), et une quantité d'espace mémoire variable pour chaque enregistrement dans lequel cette colonne est définie.
Les colonnes marquĂ©es sont des colonnes qui ne prennent aucune place en mĂ©moire si elles ne contiennent aucun enregistrement. La mĂȘme colonnes marquĂ©e peut contenir des valeurs multiples dans un seul enregistrement. Lorsque des colonnes marquĂ©es sont dĂ©finies dans un enregistrement, chaque instance d'une colonne marquĂ©e prend approximativement 4 octets d'espace mĂ©moire en plus de la taille de la valeur de l'instance de la colonne marquĂ©e. Lorsque le nombre d'instances d'une seule colonne marquĂ©e est important, l'entĂȘte de chaque instance de colonne marquĂ©e fait approximativement 2 octets.
Références
- « Une brique ancestrale et fondamentale de Windows passe en open source », sur InformatiqueNews.fr, (consulté le ).
- (en)http://msdn.microsoft.com/en-us/library/ms684493(EXCHG.10).aspx Extensible Storage Engine - Microsoft Developer Network
- (en) Tony Redmond,Microsoft Exchange Server for Windows 2000,Digital Press - 2001, (ISBN 9781555582241)
- Jean-François Apréa,Préparation à la certification MCSE Windows server 2003 active directory,Editions ENI - 2005, (ISBN 9782746024984)
- (en)https://technet.microsoft.com/en-us/library/aa998171(EXCHG.65).aspx Extensible Storage Engine Architecture - Microsoft TechNet
Liens externes
- http://www.msexchange.org/pages/article_p.asp?id=807
- « http://www.techgalaxy.net/Docs/Exchange/Exchange%202000%20Acronyms%20and%20Terminology.htm »(Archive.org ⹠Wikiwix ⹠Archive.is ⹠Google ⹠Que faire ?)
- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ese/ese/portal.asp
- http://www.messagingtalk.org/content/227.html