Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1 Las verdaderas espadas de la base de datos, las globales, se conocen desde hace mucho tiempo, pero todavía pocos saben cómo usarlas de manera efectiva o no poseen esta superarma en absoluto.

Si utiliza globales para resolver aquellos problemas en los que son realmente buenos, puede lograr resultados sobresalientes. Ya sea en productividad o en simplificar la solución del problema (1, 2).

Los globales son una forma especial de almacenar y procesar datos, completamente diferente de las tablas en SQL. Aparecieron en 1966 en el idioma. PAPERAS) (desarrollo evolutivo - Script de objeto de caché, en adelante COS) en la base de datos médica y todavía está ahí utilizado activamente, y también penetró en algunas otras áreas donde se requiere confiabilidad y alto rendimiento: finanzas, comercio, etc.

Los globales en los DBMS modernos admiten transacciones, registros, replicación y particiones. Aquellos. se pueden utilizar para construir sistemas modernos, confiables, distribuidos y rápidos.

Los globales no te limitan al modelo relacional. Le brindan la libertad de desarrollar estructuras de datos optimizadas para tareas específicas. Para muchas aplicaciones, el uso inteligente de elementos globales puede ser verdaderamente un arma secreta, que ofrece un rendimiento con el que los desarrolladores de aplicaciones relacionales sólo pueden soñar.

Los globales como forma de almacenar 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 idioma del que alguna vez vinieron.

2. Cómo funcionan las globales

Primero, comprendamos cómo funcionan las globales y cuáles son sus puntos fuertes. Los globales se pueden considerar desde diferentes puntos de vista. En esta parte del artículo los veremos como árboles. O como almacenes de datos jerárquicos.

En pocas palabras, un global es una matriz persistente. Una matriz que se guarda automáticamente en el disco.
Es difícil imaginar algo más sencillo para almacenar datos. En código (en lenguajes COS/M) se diferencia de una matriz asociativa normal sólo en el símbolo ^ antes del nombre.

Para guardar datos de forma global, no es necesario aprender el lenguaje de consulta SQL, los comandos para trabajar con ellos son muy simples. Se pueden aprender en una hora.

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

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

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



Al insertar información en un global (comando Establecer), suceden automáticamente 3 cosas:

  1. Guardar datos en el disco.
  2. Indexación. Lo que está entre paréntesis es la clave (en la literatura inglesa, "subíndice"), y a la derecha de igual está el valor ("valor de nodo").
  3. Ordenando Los datos están ordenados por clave. En el futuro, al atravesar la matriz, el primer elemento será “Sergey Smith” y el segundo “John Sidorov”. Al recibir una lista de usuarios del global, la base de datos no pierde tiempo clasificando. Además, puede solicitar la salida de una lista ordenada, comenzando desde cualquier clave, incluso una inexistente (la salida comenzará desde la primera clave real, que viene después de la inexistente).

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

Por supuesto, la velocidad de inserción en sí misma no dice mucho. Puede, por ejemplo, escribir información muy rápidamente en archivos de texto, como este según los rumores El procesamiento de visas funciona. Pero en el caso de los globales, el resultado es un almacenamiento indexado estructurado con el que se podrá trabajar fácil y rápidamente en el futuro.

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

  • La mayor fortaleza de los globales es la velocidad a la que se pueden insertar nuevos nodos.
  • Los datos en el global siempre están indexados. Atravesarlos, tanto en un nivel como en lo más profundo del árbol, siempre es rápido.

Agreguemos algunas ramas más del segundo y tercer nivel al 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

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

Es obvio que se pueden construir árboles de varios niveles basados ​​​​en globales. Además, el acceso a cualquier nodo es casi instantáneo debido a la indexación automática durante la inserción. Y en cualquier nivel del árbol, todas las ramas están ordenadas por clave.

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

Otro punto interesante. Puedes construir un árbol sin especificar los valores de los nodos de los niveles superiores.

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

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

Los círculos vacíos son nodos que no tienen ningún valor asignado.

Para comprender mejor los globales, comparémoslos con otros árboles: árboles de jardín y árboles de nombres de sistemas de archivos.

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

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

Como vemos en los árboles de jardín, las hojas y los frutos se encuentran únicamente en los extremos de las ramas.
Sistemas de archivos: la información se almacena solo en los extremos de las ramas, que son nombres de archivos completos.

Y aquí está la estructura de datos global.

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1Diferencias

  1. Nodos internos: La información en un global se puede almacenar en cada nodo, no solo en los extremos de las ramas.
  2. Nodos externos: El global debe tener valores definidos en los extremos de las ramas, mientras que FS y árboles de jardín no.



En términos de nodos internos, podemos decir que la estructura de lo global es un superconjunto de la estructura de los árboles de nombres en los sistemas de archivos y los árboles de jardín. Aquellos. mas flexible.

En general, lo global es Árbol ordenado con capacidad de almacenar datos en cada nodo..

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

  1. Eliminar un solo archivo en un directorio eliminaría automáticamente el directorio, así como todos los directorios superpuestos que contengan solo el directorio que acaba de eliminar.
  2. No habría necesidad de directorios. Simplemente habría archivos con subarchivos y archivos sin subarchivos. Si se compara con un árbol común y corriente, cada rama se convertiría en un fruto.

    Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

  3. Es posible que no se necesiten elementos como archivos README.txt. Todo lo que fuera necesario decir sobre el contenido del directorio podría escribirse en el propio archivo del directorio. En el espacio de ruta, el nombre del archivo no se puede distinguir del nombre del directorio, por lo que fue posible arreglárselas solo con archivos.
  4. La velocidad de eliminación de directorios con subdirectorios y archivos anidados aumentaría drásticamente. Muchas veces en Habré ha habido artículos sobre lo largo y difícil que es eliminar millones de archivos pequeños (1, 2). Sin embargo, si crea un sistema de pseudoarchivos global, le llevará segundos o fracciones. Cuando probé la eliminación de subárboles en una computadora doméstica, eliminó entre 1 y 96 millones de nodos de un árbol de dos niveles en un HDD (no SSD) en 341 segundo. Además, estamos hablando de eliminar parte del árbol, y no solo el archivo completo con globales.

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1
Eliminar subárboles es otro punto fuerte de los globales. No necesitas recursividad para esto. Esto sucede increíblemente rápido.

En nuestro árbol esto se podría hacer con el comando Matar.

Kill ^a("+7926X")

Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 1

Para comprender mejor qué acciones están disponibles para nosotros en las acciones globales, proporcionaré una breve tabla.

Comandos y funciones básicos para trabajar con globales en COS

Set
Establecer ramas a un nodo (si aún no están definidas) y valores de nodo

ir
Copiar un subárbol

Matar
Eliminar un subárbol

ZKill
Eliminar el valor de un nodo específico. El subárbol que emerge del nodo no se toca.

$ Query
Recorrido completo del árbol, adentrándose en el árbol.

$Pedido
Atravesar ramas de un nodo específico

$Datos
Comprobar si un nodo está definido

$Incremento
Incrementar atómicamente el valor de un nodo. Para evitar hacer lecturas y escrituras, para ACID. Recientemente se ha recomendado cambiar a $Secuencia

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

Observación: Este artículo y mis comentarios son mi opinión y no tienen relación con la posición oficial de InterSystems Corporation.

Extensión Los globales son espadas-tesoros para almacenar datos. Árboles. Parte 2. Aprenderá qué tipos de datos se pueden mostrar en los globales y en qué tareas brindan el máximo beneficio.

Fuente: habr.com

Añadir un comentario