Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1 Las verdaderas espadas de la base de datos, los globales, son bien conocidos, pero aún muy pocos saben cómo usarlos de manera efectiva o siquiera dominan esta superarma.

Si se utilizan los globales para resolver tareas en las que realmente son buenos, se pueden lograr resultados excepcionales. Ya sea en rendimiento o en la simplificación de la solución de tareas (1, 2).

Los globales son una forma especial de almacenar y procesar datos, muy diferente de las tablas en SQL. Aparecieron en 1966 en el lenguaje M(UMPS) (una evolución de — Caché ObjectScript, luego COS) en bases de datos médicas y todavía se utilizan allí activamente, así como en algunas otras áreas donde se requiere fiabilidad y alto rendimiento: finanzas, trading, etc.

Los globales en los sistemas de gestión de bases de datos modernos soportan transacciones, registro, replicación, particionamiento. Es decir, sobre ellos se pueden construir sistemas modernos, fiables, distribuidos y rápidos.

Los globales no te limitan a los confines del modelo relacional. Te dan libertad para desarrollar estructuras de datos optimizadas para tareas específicas. Para muchas aplicaciones, el uso razonable de los globales puede ser una auténtica arma secreta, proporcionando un rendimiento con el que los desarrolladores de aplicaciones relacionales solo pueden soñar.

Los globales como forma de almacenamiento de datos se pueden utilizar en muchos lenguajes de programación modernos, tanto de alto como de bajo nivel. Por lo tanto, en este artículo me centraré específicamente en los globales, y no en el lenguaje del que alguna vez surgieron.

2. Cómo funcionan los globales

Primero, pongamos en claro cómo funcionan los globales y cuáles son sus puntos fuertes. Se puede mirar a los globales desde diferentes puntos de vista. En esta parte del artículo, los veremos como árboles. O como almacenes de datos jerárquicos.

Simplificando, un global es un array persistente. Un array que se guarda automáticamente en el disco.
Es difícil imaginar algo más simple para almacenar datos. En código (en lenguajes COS/M) solo se diferencia de un array asociativo común por el símbolo ^ antes del nombre.

Para almacenar datos en un global no es necesario aprender el lenguaje de consultas SQL, sus comandos son muy simples. Se pueden aprender en una hora.

Comencemos con el ejemplo más simple. Un árbol de un solo nivel con 2 ramas. Los ejemplos están escritos en COS.

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

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



Al insertar información en global (comando Set), ocurren automáticamente 3 cosas:

  1. Guardado de datos en el disco.
  2. Indexación. Lo que está entre paréntesis actúa como clave (en la literatura anglófona, se llama «subscript»), y a la derecha del igual está el valor («node value»).
  3. Ordenación. Los datos se ordenan por clave. En adelante, al recorrer el array, el primer elemento será «Sergey Smith» y el segundo «John Sidorov». Al obtener la lista de usuarios del global, la base no pierde tiempo ordenando. Además, se puede solicitar la salida de una lista ordenada comenzando desde cualquier clave, incluso inexistente (la salida comenzará desde la primera clave real que siga a la inexistente).

Todas estas operaciones ocurren increíblemente rápido. En mi computadora personal, obtenía valores de hasta 750,000 inserciones/segundo en un solo proceso. En procesadores multinúcleo, los valores pueden alcanzar decenas de millones inserciones/segundo.

Por supuesto, la velocidad de inserción por sí sola dice poco. Por ejemplo, se puede escribir información muy rápidamente en archivos de texto, así es como según rumores, funciona el procesamiento de Visa. Pero en el caso de los globals, obtenemos un almacenamiento indexado estructurado, con el que se puede trabajar de forma rápida y sencilla más adelante.

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

  • La mayor fortaleza de los globals es la velocidad de inserción de nuevos nodos.
  • Los datos en el global siempre están indexados. Su recorrido, tanto a un nivel como hacia abajo en el árbol, siempre es rápido.

Agreguemos al global unas cuantas ramas de segundo y tercer nivel.

Set ^a("+7926X", "city") = "Moscú"
Set ^a("+7926X", "city", "street") = "Plaza Req"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "Londres"
Set ^a("+7916Y", "city", "street") = "Calle Baker"
Set ^a("+7916Y", "age") = 36

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

Es obvio que sobre la base de los globals se pueden construir árboles multidimensionales. Además, el acceso a cualquier nodo es prácticamente instantáneo gracias al autoindexado al insertar. Y en cualquier nivel del árbol, todas las ramas están ordenadas por clave.

Como se puede ver, la información se puede almacenar tanto en clave como en valor. La longitud total de la clave (la suma de las longitudes de todos los índices) puede alcanzar 511 bytes, mientras que los valores 3.6 MB para Caché. El número de niveles en el árbol (el número de dimensiones) es 31.

Otro aspecto interesante. Se puede construir un árbol sin definir los valores de los nodos de los niveles superiores.

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

Establecer ^b("a", "b", "c", "d") = 1
Establecer ^b("a", "b", "c", "e") = 2
Establecer ^b("a", "b", "f", "g") = 3

Los nodos vacíos son aquellos a los que no se les ha asignado un valor.

Para comprender mejor los globales, comparemoslos con otros árboles: con árboles frutales y con árboles de sistemas de archivos.

Compararemos los árboles en los globales con las estructuras jerárquicas que nos son más familiares: con los árboles comunes que crecen en jardines y campos, así como con los sistemas de archivos.

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

Como podemos ver en los árboles frutales, las hojas y los frutos se encuentran solo en las puntas de las ramas.
En los sistemas de archivos, la información se almacena únicamente en las puntas de las ramas, que son los nombres completos de los archivos.

Aquí está la estructura de datos de un global.

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1Diferencias:

  1. Nodos internos: la información en un global puede almacenarse en cada nodo, y no solo en las puntas de las ramas.
  2. Nodos externos: en un global, se deben definir obligatoriamente valores en las puntas de las ramas, mientras que en los árboles de sistemas de archivos y frutales, no es necesario.



En algunos nodos internos, se puede decir que la estructura de un global es un superconjunto de la estructura de los árboles de nombres en los sistemas de archivos y los árboles frutales. Es decir, es más flexible.

En general, un global representa un árbol ordenado con la capacidad de almacenar datos en cada nodo..

Para comprender mejor el funcionamiento de los globales, imaginemos qué pasaría si los creadores de sistemas de archivos usaran un enfoque similar al de los globales para almacenar información.

  1. Al eliminar un solo archivo en un directorio, se eliminaría automáticamente el directorio, así como todos los directorios superiores que contengan únicamente el directorio recién eliminado.
  2. La necesidad de directorios desaparecería. Simplemente existirían archivos con subarchivos y archivos sin subarchivos. Si se compara con un árbol normal, cada rama se convertiría en un fruto.

    Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

  3. Cosas como los archivos README.txt probablemente habrían desaparecido. Todo lo que se necesita decir sobre el contenido de un directorio podría estar escrito en el propio archivo del directorio. En el espacio de rutas, el nombre de un archivo es indistinguible del nombre de un directorio, por lo que se podrían usar solo archivos.
  4. La velocidad de eliminación de directorios con subdirectorios y archivos aumentaría drásticamente. Muchas veces en Habr, han aparecido artículos sobre lo lento y difícil que es eliminar millones de archivos pequeños.1, 2). Sin embargo, si se crea un sistema de pseudoarchivos a nivel global, eso tomará segundos o fracciones de segundo. Mientras probaba la eliminación de subárboles en mi computadora de casa, eliminé de 96 a 341 millones de nodos de un árbol de dos niveles en un HDD (no SSD) en 1 segundo. Cabe mencionar que se trata de eliminar una parte del árbol, no simplemente de un archivo completo con globales.

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1
La eliminación de subárboles es otra gran ventaja de los globales. No se necesita recursión para esto. Esto ocurre increíblemente rápido.

En nuestro árbol, esto podría hacerse con el comando Eliminar.

Kill ^a("+7926X")

Globales: herramientas potentes para el almacenamiento de datos. Árboles. Parte 1

Para entender mejor qué acciones tenemos disponibles sobre los globales, proporcionaré una breve tabla.

Comandos y funciones principales para trabajar con globales en COS

Establecer
Establecer ramas hasta el nodo (si aún no están definidas) y el valor del nodo

Fusionar
Copia de subárbol

Eliminar
Eliminación de subárbol

ZKill
Eliminación del valor de un nodo específico. El subárbol que sale del nodo no se toca

$Query
Recorrido completo del árbol con descenso profundo

$Order
Recorrido de ramas de un nodo específico

$Data
Verificación de si el nodo está definido

$Increment
Incremento atómico del valor del nodo. Para evitar lecturas y escrituras, para ACID. Recientemente se recomienda cambiar a $Sequence

Gracias por su atención, estamos listos para responder a sus preguntas.

Descargo de responsabilidad: Este artículo y mis comentarios al respecto son mi opinión personal y no representan la posición oficial de la corporación InterSystems.

Continuación Globales: herramientas potentes para el almacenamiento de datos. Árbolы. Parte 2. Aprenderá qué tipos de datos se pueden mostrar en los globales y en qué tareas brindan la mayor ventaja.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster