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 de bases de datos -globais- son coñecidas desde hai tempo, pero aínda poucos saben usalas de forma eficaz ou non posúen esta superarma en absoluto.

Se usas globais para resolver aqueles problemas nos que son realmente bos, podes conseguir resultados excelentes. Xa sexa na produtividade ou na simplificación da solución do problema (1, 2).

Os globais son unha forma especial de almacenar e procesar datos, completamente diferente das táboas en SQL. Apareceron en 1966 na lingua M (UMPS) (desenvolvemento evolutivo - Cache ObjectScript, en diante COS) na base de datos médica e aínda está alí usado activamente, e tamén penetrou nalgunhas outras áreas onde se require fiabilidade e alto rendemento: finanzas, comercio, etc.

Os globais nos DBMS modernos admiten transaccións, rexistro, replicación e partición. Eses. poden utilizarse para construír sistemas modernos, fiables, distribuídos e rápidos.

Os globais non te limitan ao modelo relacional. Ofrécenlle a liberdade de desenvolver estruturas de datos optimizadas para tarefas específicas. Para moitas aplicacións, o uso intelixente dos globais pode ser verdadeiramente unha arma secreta, que ofrece un rendemento co que os desenvolvedores de aplicacións relacionais só poden soñar.

Os globais como forma de almacenar 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, e non na lingua da que antes proviñan.

2. Como funcionan os globais

En primeiro lugar, entendamos como funcionan os globais e cales son os seus puntos fortes. Os globais pódense ver desde diferentes puntos de vista. Nesta parte do artigo verémolos como árbores. Ou como almacéns de datos xerárquicos.

Para dicilo simplemente, un global é unha matriz persistente. 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) difire dunha matriz asociativa normal só no símbolo ^ antes do nome.

Para gardar datos nun global, non é necesario aprender a linguaxe de consulta SQL; os comandos para traballar con eles son moi sinxelos. Pódense aprender nunha hora.

Comecemos co exemplo máis sinxelo. Árbore dun só nivel con 2 pólas. 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 global (comando Establecer), ocorren automaticamente 3 cousas:

  1. Gardando datos no disco.
  2. Indexación. O que está entre parénteses é a clave (na literatura inglesa - "subíndice"), e á dereita de iguais está o valor ("valor de nodo").
  3. Ordenar. Os datos están ordenados por clave. No futuro, ao percorrer a matriz, o primeiro elemento será "Sergey Smith" e o segundo "John Sidorov". Ao recibir unha lista de usuarios do global, a base de datos non perde tempo ordenando. Ademais, pode solicitar a saída dunha lista ordenada, a partir de calquera clave, incluso unha inexistente (a saída comezará a partir da primeira clave real, que vén despois da inexistente).

Todas estas operacións ocorren moi rápido. No meu ordenador de casa estaba recibindo valores de ata 750 insercións/seg nun só proceso. Nos procesadores multinúcleo os valores poden alcanzar decenas de millóns insercións/seg.

Por suposto, a velocidade de inserción en si non di moito. Pode, por exemplo, escribir información moi rapidamente en ficheiros de texto, así segundo os rumores Traballos de tramitación de visados. Pero no caso dos globais, obtemos como resultado un almacenamento indexado estruturado, co que se pode traballar de xeito sinxelo e rápido no futuro.

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

  • A maior fortaleza dos globais é a velocidade á que se poden inserir novos nodos.
  • Os datos no global están sempre indexados. Percorrelos, tanto nun nivel como no fondo da árbore, sempre é rápido.

Engademos algunhas ramas máis do segundo e terceiro niveis ao 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

É obvio que se poden construír árbores de varios niveis baseándose en globais. Ademais, o acceso a calquera nodo é case instantáneo debido á autoindexación durante 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 nunha clave como nun valor. A lonxitude total da clave (a suma das lonxitudes de todos os índices) pode alcanzar Byte 511, e os valores 3.6 MB para Caché. O número de niveis da árbore (número de dimensións) é 31.

Outro punto interesante. Podes construír unha árbore sen especificar os valores dos nodos dos niveis superiores.

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 nós que non teñen ningún valor asignado.

Para comprender mellor os globais, comparámolos con outras árbores: árbores do xardín e árbores de nomes do sistema de ficheiros.

Comparemos árbores en globais coas estruturas xerárquicas máis coñecidas para nós: con árbores comúns 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 vemos nas árbores do xardín, as follas e os froitos só se atopan nos extremos das pólas.
Sistemas de ficheiros: a información só se almacena nos extremos das ramas, que son nomes de ficheiros totalmente cualificados.

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 nun 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 ramas, mentres que FS e árbores do xardín non.



En termos de nós internos, podemos dicir que a estrutura do global é un superconxunto da estrutura das árbores de nomes en sistemas de ficheiros e árbores de xardín. Eses. máis flexible.

En xeral, o global é árbore ordenada coa capacidade de almacenar datos en cada nodo.

Para comprender mellor o traballo dos globais, imaxina que pasaría se os creadores dos sistemas de ficheiros utilizasen un enfoque similar ao global para almacenar información?

  1. A eliminación dun só ficheiro dun directorio eliminaría automaticamente o directorio, así como todos os directorios que conteñan só o directorio que se acaba de eliminar.
  2. Non habería necesidade de directorios. Simplemente habería ficheiros con subarquivos e ficheiros sen subarquivos. Se se compara cunha árbore común, cada rama converteríase nun froito.

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

  3. É posible que non sexan necesarios cousas como os ficheiros README.txt. Todo o que precisase dicir sobre o contido do directorio podería escribirse no propio ficheiro do directorio. No espazo da ruta, o nome do ficheiro non se pode distinguir do nome do directorio, polo que era posible arranxar só con ficheiros.
  4. A velocidade de eliminación de directorios con subdirectorios e ficheiros aniñados aumentaría drasticamente. Moitas veces en Habré apareceron artigos sobre o longo e difícil que é eliminar millóns de ficheiros pequenos (1, 2). Non obstante, se fai un pseudosistema de ficheiros nun global, tardará segundos ou fraccións dos mesmos. Cando probei a eliminación de subárbores nun ordenador doméstico, eliminou 1-96 millóns de nodos dunha árbore de dous niveis nun disco duro (non SSD) en 341 segundo. Ademais, estamos a falar de eliminar parte da árbore, e non só o ficheiro completo con globais.

Os globais son espadas de tesouro para almacenar datos. Árbores. Parte 1
Eliminar subárbores é outro punto forte dos globais. Non necesitas recursividade para iso. Isto ocorre incriblemente rápido.

Na nosa árbore isto poderíase facer co comando matar.

Kill ^a("+7926X")

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

Para comprender mellor cales son as accións dispoñibles para nós a nivel global, ofrecerei unha pequena táboa.

Comandos e funcións básicas para traballar con globais en COS

Conxunto
Establecer ramificacións nun nodo (se aínda non está definido) e valores de nodos

Fundir
Copiando unha subárbore

matar
Eliminando unha subárbore

ZKill
Eliminando o valor dun nodo específico. A subárbore que emerxe do nodo non se toca

$Query
Travesía completa da árbore, entrando profundamente na árbore

$orde
Percorrer ramas dun nodo específico

$datos
Comprobar se un nodo está definido

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

Grazas pola túa atención, estamos preparados para responder ás tú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 2. Aprenderá que tipos de datos se poden mostrar en globais e en que tarefas proporcionan o máximo beneficio.

Fonte: www.habr.com

Engadir un comentario