Les vĂ©ritables Ă©pĂ©es Ă deux tranchants des bases de donnĂ©es â les globals â sont bien connues, mais peu de gens savent encore les utiliser efficacement ou ne maĂźtrisent pas cette super-arme.
Si l'on utilise les globals pour rĂ©soudre des tĂąches oĂč ils excellent rĂ©ellement, il est possible d'obtenir des rĂ©sultats exceptionnels. Que ce soit en termes de performance ou de simplicitĂ© de la solution., ).
Les globals sont une maniĂšre spĂ©ciale de stocker et de traiter des donnĂ©es, complĂštement diffĂ©rente des tables SQL. Ils sont apparus en 1966 dans le langage (Ă©volution â , ensuite COS) dans les bases de donnĂ©es mĂ©dicales et sont encore , ainsi qu'ils ont pĂ©nĂ©trĂ© d'autres domaines, oĂč la fiabilitĂ© et la haute performance sont requises : finances, trading, etc.
Les globals dans les SGBD modernes supportent les transactions, la journalisation, la réplication, et le partitionnement. C'est-à -dire qu'on peut construire des systÚmes modernes, fiables, distribués et rapides sur eux.
Les globals ne vous limitent pas aux contraintes du modĂšle relationnel. Ils offrent la libertĂ© de concevoir des structures de donnĂ©es optimisĂ©es pour des tĂąches spĂ©cifiques. Pour de nombreuses applications, une utilisation judicieuse des globals peut ĂȘtre vĂ©ritablement une arme secrĂšte, offrant des performances dont les dĂ©veloppeurs d'applications relationnelles ne peuvent que rĂȘver.
Les globals en tant que mĂ©thode de stockage des donnĂ©es peuvent ĂȘtre utilisĂ©s dans de nombreux langages de programmation modernes, qu'ils soient de haut ou de bas niveau. C'est pourquoi dans cet article, je vais me concentrer prĂ©cisĂ©ment sur les globals, et non sur le langage dont ils sont issus.
2. Comment fonctionnent les globals
Commençons par examiner comment fonctionnent les globals et quels sont leurs points forts. On peut considérer les globals sous différents angles. Dans cette partie de l'article, nous allons les considérer comme des arbres. Ou comme des stockages de données hiérarchiques.
En termes simples, un global est un tableau persistant. Un tableau qui est automatiquement sauvegardé sur disque.
Il est difficile d'imaginer quelque chose de plus simple pour le stockage de données. En code (dans les langages COS/M), il ne se distingue d'un tableau associatif classique que par le symbole ^ placé avant le nom.
Pour sauvegarder des donnĂ©es dans un global, il n'est pas nĂ©cessaire d'apprendre le langage de requĂȘtes SQL, les commandes pour travailler avec eux sont trĂšs simples. On peut les apprendre en une heure.
Commençons par l'exemple le plus simple. Un arbre à un niveau avec 2 branches. Les exemples sont écrits en COS.

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Lors de l'insertion d'informations dans le global (commande Set), trois choses se produisent automatiquement :
- Sauvegarde des données sur le disque.
- Indexation. Ce qui est entre parenthĂšses est une clĂ© (dans la littĂ©rature anglophone â «subscript»), et ce qui est Ă droite du signe Ă©gal est une valeur («node value»).
- Tri. Les donnĂ©es sont triĂ©es par clĂ©. Lors de la traversĂ©e du tableau, le premier Ă©lĂ©ment sera «Sergey Smith», et le deuxiĂšme «John Sidorov». Lors de la rĂ©cupĂ©ration de la liste des utilisateurs depuis le global, la base ne perd pas de temps Ă trier. De plus, il est possible de demander l'affichage d'une liste triĂ©e Ă partir de n'importe quelle clĂ©, mĂȘme inexistante (l'affichage commencera par la premiĂšre clĂ© rĂ©elle qui suit celle qui n'existe pas).
Toutes ces opĂ©rations se produisent incroyablement rapidement. Sur un ordinateur domestique, j'obtenais des valeurs allant jusqu'Ă 750 000 insertions/seconde dans un seul processus. Sur des processeurs multicĆurs, les valeurs peuvent atteindre d'insertions/seconde.
Bien sĂ»r, la vitesse d'insertion en elle-mĂȘme ne signifie pas grand-chose. Par exemple, il est possible d'Ă©crire trĂšs rapidement des informations dans des fichiers textes â c'est ainsi que fonctionne le traitement de Visa. Mais dans le cas des globals, nous obtenons un stockage structurĂ© et indexĂ©, avec lequel il est possible de travailler facilement et rapidement par la suite.

- Le plus grand atout des globals est la rapiditĂ© d'insertion de nouveaux nĆuds.
- Les données dans le global sont toujours indexées. Leur traversée tant au niveau qu'en profondeur de l'arbre est toujours rapide.
Ajoutons quelques branches supplémentaires au deuxiÚme et au troisiÚme niveau dans le global.
Set ^a("+7926X", "city") = "Moscou"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "Londres"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36 
Il est Ă©vident que sur la base des globals, il est possible de construire des arbres multicouches. De plus, l'accĂšs Ă n'importe quel nĆud est pratiquement instantanĂ© grĂące Ă l'auto-indexation lors de l'insertion. Et Ă chaque niveau de l'arbre, toutes les branches sont triĂ©es par clĂ©.
Comme on peut le voir, l'information peut ĂȘtre stockĂ©e tant dans la clĂ© que dans la valeur. La longueur totale de la clĂ© (somme des longueurs de tous les index) peut atteindre , et les valeurs pour CachĂ©. Le nombre de niveaux dans l'arbre (le nombre de dimensions) est de 31.
Un autre point intĂ©ressant. Il est possible de construire un arbre sans dĂ©finir les valeurs des nĆuds des niveaux supĂ©rieurs.

Définir ^b("a", "b", "c", "d") = 1
Définir ^b("a", "b", "c", "e") = 2
DĂ©finir ^b("a", "b", "f", "g") = 3 Les cercles vides sont des nĆuds auxquels aucune valeur n'est attribuĂ©e.
Pour mieux comprendre les globales, comparons-les Ă d'autres arbres : aux arbres fruitiers et aux arbres des systĂšmes de fichiers.
Comparons les arbres sur les globales aux structures hiérarchiques les plus familiÚres : aux arbres ordinaires qui poussent dans les jardins et les champs, ainsi qu'aux systÚmes de fichiers.

Comme nous le voyons avec les arbres fruitiers, les feuilles et les fruits ne se trouvent qu'à l'extrémité des branches.
Dans les systÚmes de fichiers, les informations sont stockées uniquement à l'extrémité des branches qui sont des noms de fichiers complets.
Voici la structure des données globales.
Différences :
- NĆuds internes : Les informations dans une globale peuvent ĂȘtre stockĂ©es dans chaque nĆud, et pas seulement Ă l'extrĂ©mitĂ© des branches.
- NĆuds externes : Une globale doit obligatoirement avoir des valeurs dĂ©finies Ă l'extrĂ©mitĂ© des branches, ce qui n'est pas le cas pour les arbres FS et les arbres fruitiers.
En ce qui concerne certains nĆuds internes, on peut dire que la structure d'une globale est un sur-ensemble de la structure des arbres de noms dans les systĂšmes de fichiers et les arbres fruitiers, c'est-Ă -dire plus flexible.
De maniĂšre gĂ©nĂ©rale, une globale reprĂ©sente un arbre ordonnĂ© avec la possibilitĂ© de stocker des donnĂ©es dans chaque nĆud.
Pour mieux comprendre le fonctionnement des globales, imaginons ce qu'il en serait si les concepteurs de systĂšmes de fichiers utilisaient une approche similaire Ă celle des globales pour le stockage d'informations ?
- à la suppression d'un seul fichier dans un répertoire, le répertoire serait automatiquement supprimé, ainsi que tous les répertoires supérieurs ne contenant que ce répertoire nouvellement supprimé.
- Le besoin de répertoires disparaßtrait. Il y aurait simplement des fichiers avec des sous-fichiers et des fichiers sans sous-fichiers. Si l'on compare à un arbre ordinaire, chaque branche deviendrait un fruit.

- Des Ă©lĂ©ments tels que les fichiers README.txt pourraient disparaĂźtre. Tout ce qui devait ĂȘtre dit sur le contenu d'un rĂ©pertoire pourrait ĂȘtre inscrit dans le fichier du rĂ©pertoire lui-mĂȘme. Dans l'espace des chemins, le nom d'un fichier est indistinguable de celui d'un rĂ©pertoire, donc il pourrait n'y avoir que des fichiers.
- La vitesse de suppression des rĂ©pertoires avec des sous-rĂ©pertoires et des fichiers augmenterait considĂ©rablement. De nombreuses fois, des articles sont apparus sur Habr sur la durĂ©e et la difficultĂ© de supprimer des millions de petits fichiers (, ). Cependant, si l'on crĂ©e un systĂšme de fichiers pseudo sur les Globals, cela prendra des secondes, voire des fractions de seconde. Lorsque j'ai testĂ© la suppression de sous-arbres sur mon ordinateur personnel, j'ai pu supprimer de 96 Ă 341 millions de nĆuds d'un arbre Ă deux niveaux en une seconde sur HDD (pas sur SSD). Il s'agit de la suppression d'une partie de l'arbre, et non de la simple suppression de tout le fichier avec les Globals.

La suppression de sous-arbres est une autre grande force des Globals. La récursivité n'est pas nécessaire pour cela. Cela se produit incroyablement rapidement.
Dans notre arbre, cela pourrait ĂȘtre fait avec la commande Kill.
Kill ^a("+7926X") 
Pour mieux comprendre quelles actions nous pouvons effectuer sur les Globals, voici un tableau succinct.
Commandes et fonctions principales pour travailler avec les Globals dans COS
DĂ©finir des branches jusqu'au nĆud (si elles ne sont pas dĂ©jĂ dĂ©finies) et la valeur du nĆud
Copier un sous-arbre
Supprimer un sous-arbre
Supprimer la valeur d'un nĆud spĂ©cifique. Le sous-arbre sortant du nĆud n'est pas touchĂ©.
Parcours complet de l'arbre avec approfondissement
Parcours des branches d'un nĆud spĂ©cifique
VĂ©rifier si le nĆud est dĂ©fini
IncrĂ©mentation atomique de la valeur d'un nĆud. Pour Ă©viter les lectures et Ă©critures, pour ACID. Il est rĂ©cemment recommandĂ© de passer Ă
Merci de votre attention, nous sommes prĂȘts Ă rĂ©pondre Ă vos questions.
Avertissement: Cet article et mes commentaires à son sujet représentent mon avis et ne reflÚtent pas la position officielle de l'entreprise InterSystems.
Suite . Vous dĂ©couvrirez quels types de donnĂ©es peuvent ĂȘtre affichĂ©s sur les Globals et dans quelles tĂąches ils apportent le maximum de bĂ©nĂ©fice.
Source : habr.com

