- JET Blue
-
Moteur de stockage extensible
Pour les articles homonymes, voir ESE.Le moteur de stockage extensible de Windows (Extensible Storage Engine ou ESE), connu aussi sous le nom de JET Blue, est une méthode d'accès séquentiel indexé c'est-à-dire une technologie permettant le stockage de données. C'est le moteur de base de données utilisé par les produits tels qu'Exchange Server, Active Directory, SQL Server. Il repose sur les principes connus sous l'acronyme ACID des Systèmes de gestion de bases de données relationelles.
ESE permet aux applications d'avoir un état consistent de données via un système de mises à jour et de récupérations qui se passent sous forme de transactions.
Les transactions dans ESE sont hautement concurrentes ce qui rend ESE utilisable pour des applications pour serveur. ESE met en mémoire cache des données de façon intelligente pour y permettre un accès à haute performance.Un mécanisme de recouvrement des données après un plantage du système est fourni afin que les données soient sauvegardées.
De plus, ESE est un logiciel léger ce qui le rend utilisable pour des applications auxiliaires.
Sommaire
Base de données
Une base de donnée est à la fois un regroupement physique et logique de données. Une base de données ESE prend la forme d'un unique fichier pour Windows. En interne la base de données est une collection de pages de 2, 4 ou 8 kOctet. Ces pages contiennent des méta-données pour décrire les données contenues au sein des bases de données, les données elles-mêmes, des index pour persist ordres intéressants des données, et d'autres informations. Cette information est intermélée au sein du fichier de la base de données mais des efforts sont faits pour garder data used together clustered together within the database. Une base de données ESE peut contenir jusqu'à 2^31 pages, ou 16 Téra-octets de données, pour des pages de taille de 8 k-octets.
Les bases de données ESE sont organisées en groupes appelés instances. La plupart des applications utilise une seule instance, mais toutes les applications peuvent aussi utiliser de multiples instances. L'importance de l'instance est qu'elle associe une single recovery log series avec une ou plus base de données. Actuellement, jusqu'à 6 bases de données utilisateur peuvent être attachées à une instance ESE à tout moment. Chaque processus utilisant ESE peut avoir jusqu'à 1024 instances ESE.
Une base de données est portable du fait qu'elle 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. La base de donnée ne peut pas être copiée pendant qu'elle utilisée activement puisque ESE ouvre les fichiers de bases de données de façon exclusive. Une base de données peut physiquement résider sur n'importe quel dispositif ayant un support pour les opérations d'entrée/sortie adressables directement par Windows.
Tables
Une table est une collection homogène d'enregistrements, où chaque enregistrement possède le même nombre de colonnes. Chaque table est identifiée par un nom de table, dont la portée est locale à la base de données dans laquelle la table est contenue. 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 un ou plus 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 définis pour faire persister des ordres intéressants parmi les données, et permettent des accès séquentiels aux enregistrements dans l'ordre de l'index, et des accès directs aux enregistrements par valeurs des index des colonnes. Des index en cluster dans ESE doivent aussi être primaires, ce qui signifie que la clé de l'index doit être unique.
Les index en cluster et ceux qui ne le sont pas sont représentés en utilisant des arbres B+. Si une opération d'insertion ou de mise à jour cause un dépassement de page, la page sera coupée en deux : une nouvelle page est alors allouée et est logiquement chainée entre les deux pages précédemment adjacentes. Du fait que cette nouvelle page n'est pas physiquement adjacente à ses voisines logiques, les accès à elle n'est pas aussi efficace. ESE possède une caractéristique de compactage en-ligne qui re-compacte les données. Si une table doit ê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. Ceci permet d'éviter les opérations de coupage de page ou permet de les remettre à un moment ultérieur.
Enregistrements et colonnes
Un enregistrement est un ensemble associé de valeurs de colonnes. Les enregistrements sont insérés et mis à jour via des opérations "update" et peuvent être supprimés via des opérations "Delete". Les colonnes sont fixées et lues via les opérations "SetColumns" et "RetrieveColumns", respectivement. La taille maximale d'un enregistrement est de 8 110 octets pour des pages de 8k-octets avec l'exception des colonnes à longue valeurs. Les types des colonnes "LongText" et "LongBinary" ne contribuent pas significativement à la limitation en taille, et des enregistrements peuvent contenir des données d'une taille bien plus large qu'une taille de page de base de données si ces données sont stockées dans des colonnes de type "Long value". Lorsqu'une référence "long value" est stockée dans un enregistrement, il n'y a besoin que de 9 octets de données requis. Ces données "long values" peuvent elles-mêmes faire jusqu'à 2G-octets 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 2G-octets. Faire le choix des rtpes 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 fractionel) 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 G-octets Texte long Chaîne de caractères de grande taille ANSI ou Unicode de longueur < 2G-octets 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 sont essentiellement des colonnes qui utilisent une quantité de mémoire variable pour chaque enregistrement dans laquelle elles sont définies; cet espace de mémoire dépend de la taille de la valeur de cette colonne particulière. 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. Elles peuvent être à valeur unique ou être à valeur multiples. 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. Les colonnes marquées sont idéales pour des colonnes rares parce qu'elles n'occupent aucune place en mémoire si elles ne sont pas définies. Si une colonne marquée à valeur multiple est indexée, l'index ne contiendra qu'une seul entrée pour l'enregistrement pour chaque valeur de la colonne marquée.
Les index
Un index est un ordonnemencement destiné à persister au sein des enregistrements dans une table. Les index sont utilisés pour des accès séquentiels aux rangées de données dans l'ordre défini, et pour la navigation directe au sein des enregistrements basée sur les valeurs indexées des colonnes. L'ordre défini par un index est décrit en termes d'un tableau de colonnes, dans l'ordre de précédence. ce tableau de colonnes est également appelé la clé d'index. chaque colonne est appelée un segment d'index. Chaque segment d'index peut être classé en ordre de tri croissant ou décroissant, en termes de son ordonnancement. On peut définir autant d'index que l'on veut pour une table. ESE fournit un ensemble riche de caractéristiques d'indexation.
Transactions
Une transaction est une unité logique de traitement délimitée par des opérations BeginTransaction, CommitTransaction, ou Rollback.
Un curseur est un pointeur logique au sein de l'index de la table. Le curseur peut être positionné sur un enregistrement, avant le premier enregistrement, après le dernier enregistrement ou même entre des enregistrements. Si un curseur est positionné avant ou après un enregistrement, il n'y a pas de enregistrement en cours. Il est possible d'avoir de multiple curseurs dans le même index de table. De nombreuses opérations sur les colonnes ou sur les enregistrement sont basées sur la position du curseur. La position du curseur peut être déplacée de façon séquentiellement par des opérations Move ("déplace") ou directement en utilisant des clés d'index avec des opération Seek ("Cherche"). Les curseurs peuvent aussi être déplacés à une position fractionelle au sein d'un index. De cette manière, le curseur peut être déplacé rapidement à une position de barre latérale. Cette opération est accomplie à la même vitesse qu'une opération Seek. Aucune donnée intervenante ne doit être accèdee.
Traitement de requêtes
Les applicatons ESE effectuent invariablement des requêtes dans leur données.
Mise en journal et récupération après un plantage
Les caractéristiques de mise en journal et de récupération après plantage de ESE garantissent l'intégrité des données et la consistence dans le cas où se produit un crash du système. La mise en journal est le processus d'enregistrement redondant des opérations de mise à jour de la base de données dans un fichier log. La structure du fichier log est très robuste contre l'éventualité d'un plantage du système. La récupération est l'utilisation de ce fichier log pour restaurer la base de données en en état après qu'un crash du système a eu lieu.
Historique
JET Blue a été conçu à l'origine par Microsoft en tant que mise à jour prospective pour le Microsoft Jet Database Engine (JET Red), moteur de base de données de Microsoft Access, mais n'a jamais été utilisé pour remplir ce rôle. À la place, il a été utilisé par Exchange Server, Active Directory, et une série d'autres services et applications Microsoft. Pendant des années, c'était une API privée utilisée par Microsoft seulement, puis devint une API publiée que tout le monde put utiliser.
Futur
Windows Mail et Desktop Search dans Windows Vista utiliseront aussi ESE pour enregistrer des index et des informations sur la propriété respectivement.
Références
- http://www.msexchange.org/pages/article_p.asp?id=807
- http://www.techgalaxy.net/Docs/Exchange/Exchange%202000%20Acronyms%20and%20Terminology.htm
- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ese/ese/portal.asp
- http://www.messagingtalk.org/content/227.html
- Portail de la sécurité informatique
Catégorie : Active Directory
Wikimedia Foundation. 2010.