Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1 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 (1, 2).

Os globais son unha forma especial de almacenar e procesar datos, completamente diferente das táboas en SQL. Apareceron na linguaxe en 1966. M(UMPS) (desenvolvemento evolutivo - Caché ObjectScript, en diante COS) en bases de datos médicas e aínda está alí se usan activamentee 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.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"



Ao inserir información nun elemento global (comando Set), ocorren tres cousas automaticamente:

  1. Gardando datos no disco.
  2. 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").
  3. 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 decenas de millóns 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í. segundo os rumores 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.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

  • 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

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

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 511 bytes, e os valores 3.6 MB 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.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

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.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

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.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1Diferenzas:

  1. Nodos internos: A información no global pódese almacenar en cada nodo, non só nos extremos das ramas.
  2. 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?

  1. 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.
  2. 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.

    Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

  3. 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.
  4. 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 (1, 2). 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.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1
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")

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1

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

Conxunto
Definir ramas no nodo (se non está xa definido) e valores de nodo

Fundir
Copiar unha subárbore

matar
Eliminar unha subárbore

ZKill
Eliminar un valor dun nodo específico. A subárbore que se estende desde o nodo non se ve afectada.

$Consulta
Desvío completo da árbore con inmersión profunda

$orde
Percorrendo as ramas dun nodo específico

$Datos
Comprobación de se un nodo está definido

Incremento de $
Incremento atómico do valor do nodo. Para evitar lecturas e escrituras, para ACID. Recentemente, recomendouse cambiar a Secuencia

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 Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 2Aprenderás que tipos de datos se poden mostrar en globais e para que tarefas ofrecen a maior vantaxe.

Fonte: www.habr.com

Compre hospedaxe fiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra aloxamento web fiable con protección DDoS, servidores VPS VDS | ProHoster