As verdadeiras espadas-tesoureiros das bases de datos (as globais) coñécense desde hai tempo, pero ata o día de hoxe poucos saben como usalas de forma eficaz ou non posúen esta superarma.
Se empregas globais para as tarefas nas que son realmente bos, podes conseguir resultados excepcionais. Xa sexa en rendemento ou na simplificación do problema (, ).
Os globais son unha forma especial de almacenar e procesar datos, completamente diferente das táboas en SQL. Apareceron na linguaxe en 1966. (desenvolvemento evolutivo - , en diante COS) en bases de datos médicas e aínda está alí e tamén penetraron nalgunhas outras áreas onde se require fiabilidade e alto rendemento: finanzas, comercio, etc.
Os globais nos SGBD modernos admiten transaccións, rexistro, replicación e particionamento. Isto significa que se poden usar para construír sistemas modernos, fiables, distribuídos e rápidos.
Os globais non che limitan ao modelo relacional. Danche a liberdade de deseñar estruturas de datos optimizadas para tarefas específicas. Para moitas aplicacións, o uso xudicioso dos globais pode ser realmente unha arma secreta, ofrecendo un rendemento co que os desenvolvedores relacionais só poden soñar.
Os globais como método de almacenamento de datos pódense usar en moitas linguaxes de programación modernas, tanto de alto como de baixo nivel. Polo tanto, neste artigo, centrareime especificamente nos globais, en lugar da linguaxe da que se orixinaron.
2. Como funcionan os globais
Entendamos primeiro como funcionan os elementos globais e cales son os seus puntos fortes. Os elementos globais pódense ver desde diferentes perspectivas. Nesta parte do artigo, verémolos como árbores ou como almacéns de datos xerárquicos.
En poucas palabras, un global é unha matriz persistente, é dicir, unha matriz que se garda automaticamente no disco.
É difícil imaxinar algo máis sinxelo para almacenar datos. No código (nas linguaxes COS/M), só se diferencia dunha matriz asociativa normal polo símbolo ^ antes do nome.
Gardar datos nun global non require aprender SQL; os comandos para traballar con eles son moi sinxelos. Podes aprendelos nunha hora.
Comecemos co exemplo máis sinxelo. Unha árbore dun só nivel con dúas ramas. Os exemplos están escritos en COS.

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Ao inserir información nun elemento global (comando Set), ocorren tres cousas automaticamente:
- Gardando datos no disco.
- Indexación. O que está entre parénteses é a clave (na literatura inglesa - "subíndice"), e á dereita de igual está o valor ("valor do nodo").
- Ordenar. Os datos están ordenados por clave. Ao percorrer a matriz, o primeiro elemento será "Sergey Smith" e o segundo será "John Sidorov". Ao recuperar unha lista de usuarios do global, a base de datos non perde tempo ordenando. Ademais, podes solicitar unha saída de lista ordenada que comece por calquera clave, mesmo unha inexistente (a saída comezará coa primeira clave real despois da inexistente).
Todas estas operacións son incriblemente rápidas. Nun ordenador doméstico, obtiven valores de ata 750.000 insercións/segundo nun só proceso. En procesadores multinúcleo, os valores poden alcanzar insercións/seg.
Por suposto, a velocidade de inserción en si non che di moito. Podes, por exemplo, escribir información en ficheiros de texto moi rápido, así. O procesamento de visados funciona. Pero cos globais, obtemos un almacenamento estruturado e indexado ao que se pode acceder de forma doada e rápida.

- A maior forza dos globais é a velocidade de inserción de novos nodos.
- Os datos globais sempre están indexados. Percorrelos, tanto a un nivel como nas profundidades da árbore, sempre é rápido.
Engadamos algunhas ramas máis de segundo e terceiro nivel á estrutura global.
Set ^a("+7926X", "city") = "Moscow"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "London"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

Claramente, pódense construír árbores de varios niveis usando globais. Ademais, o acceso a calquera nodo é practicamente instantáneo debido á indexación automática tras a inserción. E en calquera nivel da árbore, todas as ramas están ordenadas por clave.
Como podes ver, a información pódese almacenar tanto na clave como no valor. A lonxitude total da clave (a suma das lonxitudes de todos os índices) pode alcanzar , e os valores Para Caché, o número de niveis de árbore (dimensións) é 31.
Outro punto interesante: podes construír unha árbore sen especificar os valores dos nodos de nivel superior.

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3
Os círculos baleiros son nodos aos que non se lles asignou un valor.
Para comprender mellor os globais, comparémolos con outras árbores: árbores de xardín e árbores de nomes de sistemas de ficheiros.
Comparemos as árbores en elementos globais coas estruturas xerárquicas coas que estamos máis familiarizados: con árbores ordinarias que medran en xardíns e campos, así como con sistemas de ficheiros.

Como podemos ver, as árbores de xardín só teñen follas e froitos nos extremos das pólas.
Sistemas de ficheiros: a información almacénase só nos extremos das ramas, que son nomes de ficheiro completos.
E aquí está a estrutura global de datos.
Diferenzas:
- Nodos internos: A información no global pódese almacenar en cada nodo, non só nos extremos das ramas.
- Nodos externos: O global debe ter valores definidos nos extremos das súas ramas, pero o FS e as árbores de xardín non.
En termos de nodos internos, pódese dicir que a estrutura global é un superconxunto da estrutura das árbores de nomes nos sistemas de ficheiros e nas árbores de pomar. É dicir, é máis flexible.
En xeral, un global é unha árbore ordenada coa capacidade de almacenar datos en cada nodo.
Para comprender mellor como funcionan os globais, imaxinemos que pasaría se os creadores de sistemas de ficheiros empregasen un enfoque similar aos globais para almacenar información?
- Eliminar un só ficheiro nun directorio eliminaría automaticamente o directorio, así como todos os directorios superiores que conteñan só o directorio que se acaba de eliminar.
- Non habería necesidade de directorios. Simplemente habería ficheiros con subficheiros e ficheiros sen subficheiros. Se o comparamos cunha árbore normal, cada póla converteríase nun froito.

- Cousas como os ficheiros README.txt probablemente serían innecesarias. Todo o que fose necesario dicir sobre o contido dun directorio podería escribirse no propio ficheiro de directorio. No espazo de nomes de ruta, un nome de ficheiro é indistinguible dun nome de directorio, polo que os ficheiros por si sós serían suficientes.
- A velocidade de eliminación de directorios con subdirectorios e ficheiros aniñados aumentaría drasticamente. Moitas veces en Habr, houbo artigos sobre o tempo que leva e a dificultade que supón eliminar millóns de ficheiros pequenos (, ). Non obstante, se creas un pseudosistema de ficheiros nun global, levará segundos ou fraccións de segundo. Cando probei a eliminación de subárbores nun ordenador doméstico, elimináronse entre 96 e 341 millóns de nodos dunha árbore de dous niveis nun disco duro (non nun SSD) nun segundo. E estamos a falar de eliminar unha parte da árbore, non só o ficheiro completo con globais.

A poda de subárbores é outro punto forte dos globais. Non require recursividade. Ocorre incriblemente rápido.
Na nosa árbore isto podería facerse co comando matar.
Kill ^a("+7926X")

Para comprender mellor que accións temos dispoñibles en global, proporcionarei unha breve táboa.
Comandos e funcións básicas para traballar con globais en COS
Definir ramas no nodo (se non está xa definido) e valores de nodo
Copiar unha subárbore
Eliminar unha subárbore
Eliminar un valor dun nodo específico. A subárbore que se estende desde o nodo non se ve afectada.
Desvío completo da árbore con inmersión profunda
Percorrendo as ramas dun nodo específico
Comprobación de se un nodo está definido
Incremento atómico do valor do nodo. Para evitar lecturas e escrituras, para ACID. Recentemente, recomendouse cambiar a
Grazas pola súa atención, estamos dispostos a responder ás súas preguntas.
retratação: Este artigo e os meus comentarios ao mesmo son a miña opinión e non teñen relación coa posición oficial de InterSystems Corporation.
Extensión Aprenderás que tipos de datos se poden mostrar en globais e para que tarefas ofrecen a maior vantaxe.
Fonte: www.habr.com
