BRIN

BRIN ( Block  Range Index ) es una técnica de indexación de datos diseñada para procesar tablas grandes [1] en las que el valor de la columna indexada tiene una correlación natural con la posición física de la fila en la tabla . Tienen tales cualidades de tablas particionadas como la inserción rápida de filas, la creación rápida de índices, sin la necesidad de declarar particiones explícitamente. [2]

Se puede utilizar para datos geográficos [3] , series temporales [4] , logs o historial de pedidos de tiendas, que se escriben secuencialmente, y por tanto algunas columnas (fecha, hora, número) ya están parcialmente ordenadas a nivel físico, y a nivel Las mismas tablas de tiempo con tales datos generalmente crecen a tamaños gigantescos. Acelera los operadores de comparación, pero no afecta a las consultas similares. [5] . BRIN no es un índice único [6] y, por lo tanto, no se puede utilizar como índice de clave principal. [7]

Los índices BRIN fueron propuestos por primera vez por Álvaro Herrera de 2ndQuadrant en 2013 bajo el nombre de "índices Minmax". El soporte ha sido anunciado en PostgreSQL desde la versión 9.5 [8] . Otros DBMS tienen capacidades similares, incluidos Oracle [9] [10] , Netezza ("mapas de zona"), en:Infobright ("paquetes de datos"), en:MonetDBand , Apache Hive con ORC/Parquet.

Arquitectura

BRIN opera con descripciones de grandes bloques de datos, donde se almacenan los valores mínimos y máximos de la columna indexada dentro del bloque. Durante las solicitudes, los bloques se filtran primero (las condiciones de consulta se aplican a la descripción del bloque). Por lo tanto, para un pequeño número de comprobaciones, se reduce el conjunto de datos que será necesario comprobar línea por línea. [once]

PostgreSQL DBMS almacena datos en "páginas", cada tabla o índice es una secuencia de páginas. El tamaño de página estándar es de 8 kilobytes. [12] Un bloque o rango de bloques es un grupo de páginas (no filas) que se suceden en una tabla. El bloque en este caso es parte del índice, no de la tabla: su tamaño se puede determinar en el momento de crear el índice con el parámetro pages_per_range. [13]

A medida que las páginas se llenan de datos, la información del bloque se actualiza. No todas las páginas corresponden a un bloque, las páginas creadas recientemente pueden no tener un bloque (la creación de nuevos bloques en el índice ocurre, por ejemplo, durante una operación VACUUMen una tabla).

BRIN es tan compacto que cabe completamente en la RAM, lo que reduce la cantidad de operaciones de disco durante una consulta. Esto no siempre es cierto para los índices de árbol B, que necesitan un nodo de árbol para aproximadamente cada N filas de la tabla, donde N es la capacidad de un nodo. El tamaño de un índice de árbol B es significativo y puede compararse con la cantidad de datos en la columna de la tabla indexada.

Véase también

Notas

  1. Grande en cuanto al número de líneas, no al tamaño de los campos ni al tamaño absoluto de la tabla en bytes.
  2. Marcos Wong. Carga de tablas y creación de índices de rango de bloque y árbol B. Proyecto AXLE (10 de octubre de 2014). Fecha de acceso: 7 de febrero de 2018. Archivado desde el original el 4 de marzo de 2016.
  3. Copia archivada (enlace no disponible) . Consultado el 7 de agosto de 2017. Archivado desde el original el 7 de agosto de 2017. 
  4. Índices BRIN, ¿qué son y cómo los usas? . Consultado el 7 de febrero de 2018. Archivado desde el original el 8 de febrero de 2018.
  5. Cuadro 62-1. Clases de operadores BRIN integradas . Consultado el 7 de agosto de 2017. Archivado desde el original el 7 de agosto de 2017.
  6. ¿Cuándo debo usar los índices BRIN? : PostgreSQL . Consultado el 8 de febrero de 2018. Archivado desde el original el 8 de abril de 2021.
  7. Cómo promover un índice existente a clave principal en PostgreSQL - Stack Exchange para administradores de bases de datos . Consultado el 8 de febrero de 2018. Archivado desde el original el 9 de febrero de 2018.
  8. PostgreSQL: Documentación: 9.5: Versión 9.5 . Fecha de acceso: 7 de febrero de 2018. Archivado desde el original el 9 de marzo de 2018.
  9. Arup Nanda. Smart Scans cumple con los índices de almacenamiento  (neopr.)  // Oracle Magazine. —Oracle Corp. _ Archivado desde el original el 8 de febrero de 2018.
  10. Prácticas recomendadas de la aplicación Oracle Sun Database Machine para el almacenamiento de datos . Oráculo. Fecha de acceso: 7 de febrero de 2018. Archivado desde el original el 15 de marzo de 2016.
  11. Herrera, Alvaro commitdiff - BRIN: Block Range Indexes . git.postgresql.org (7 de noviembre de 2014). Consultado el 3 de octubre de 2017. Archivado desde el original el 19 de enero de 2019.
  12. PostgreSQL: Documentación: 8.0: Diseño de página de base de datos . Fecha de acceso: 7 de febrero de 2018. Archivado desde el original el 9 de marzo de 2018.
  13. PostgreSQL: Documentación: 9.5: Introducción . Consultado el 7 de agosto de 2017. Archivado desde el original el 7 de agosto de 2017.
  14. Diferencia entre el índice GiST y GIN . www.stackoverflow.com Fecha de acceso: 11 de abril de 2018.

Enlaces