stringtranslate.com

Orientación de datos

La orientación de los datos se refiere a cómo se representan los datos tabulares en un modelo de memoria lineal , como en disco o en memoria . Las dos representaciones más comunes son orientadas a columnas (formato columnar) y orientadas a filas (formato fila). [1] [2]

La elección de la orientación de los datos es una compensación y una decisión arquitectónica en bases de datos , motores de consulta y simulaciones numéricas. [1] Como resultado de estas compensaciones, los formatos orientados a filas se utilizan más comúnmente en el procesamiento de transacciones en línea (OLTP) y los formatos orientados a columnas se utilizan más comúnmente en el procesamiento analítico en línea (OLAP). [2]

Entre los ejemplos de formatos orientados a columnas se incluyen Apache ORC , [3] Apache Parquet , [4] Apache Arrow , [5] formatos utilizados por BigQuery , Amazon Redshift y Snowflake . Entre los ejemplos predominantes de formatos orientados a filas se incluyen CSV, formatos utilizados en la mayoría de las bases de datos relacionales , el formato en memoria de Apache Spark y Apache Avro . [6]

Descripción

Los datos tabulares son de naturaleza bidimensional: los datos se representan en filas y columnas. Sin embargo, los sistemas operativos modernos representan lógicamente los datos en un modelo de memoria lineal , tanto en disco como en memoria. [7] [8] [9] Por lo tanto, una tabla en un modelo de memoria lineal requiere proyectar sus elementos bidimensionales en un espacio unidimensional. La orientación de los datos se refiere a la decisión tomada en esta proyección. Hay dos opciones destacadas de orientación: orientada a filas y orientada a columnas. [1] [2]

Orientado a filas

En la orientación por filas, los elementos de la tabla

se almacenan linealmente como

Es decir, cada fila de la tabla se ubica una después de la otra. En esta orientación, los valores de la misma fila están próximos en el espacio (por ejemplo, una dirección similar en un espacio direccionable).

Ejemplos

Orientado a columnas

En la orientación por columnas, los elementos de la tabla

se almacenan linealmente como

Es decir, cada columna de la tabla se ubica una después de la otra. En esta orientación, los valores de la misma columna están próximos en el espacio (por ejemplo, una dirección similar en un espacio direccionable).

Ejemplos

Consulte la lista de DBMS orientados a columnas para obtener más ejemplos.

Compensación

La orientación de los datos es una decisión arquitectónica importante de los sistemas que manejan datos porque da lugar a compensaciones importantes en cuanto a rendimiento y almacenamiento . [8] A continuación se presentan dimensiones seleccionadas de esta compensación.

Acceso aleatorio

La orientación por filas se beneficia del acceso aleatorio rápido a las filas. La orientación por columnas se beneficia del acceso aleatorio rápido a las columnas. En ambos casos, esto es el resultado de menos errores de página o caché al acceder a los datos. [8]

Insertar

La orientación por filas se beneficia de la inserción rápida de una nueva fila. La orientación por columnas se beneficia de la inserción rápida de una nueva columna.

Esta dimensión es una razón importante por la que los formatos orientados a filas se utilizan más comúnmente en el procesamiento de transacciones en línea (OLTP), ya que da como resultado transacciones más rápidas en comparación con los formatos orientados a columnas. [2]

Acceso condicional

La orientación por filas se beneficia del acceso rápido bajo un filtro. La orientación por columnas se beneficia del acceso rápido bajo una proyección. [4] [3]

Rendimiento computacional

Los sistemas orientados a columnas se benefician de operaciones analíticas rápidas. Este es el resultado de poder aprovechar las instrucciones SIMD . [5]

Tamaño sin comprimir

La orientación por columnas se beneficia de un tamaño menor sin comprimir. Esto es el resultado de la posibilidad que ofrece esta orientación para representar ciertos tipos de datos con codificaciones dedicadas. [4] [3]

Por ejemplo, una tabla de 128 filas con una columna booleana requiere 128 bytes en un formato orientado a filas (un byte por booleano), pero 128 bits (16 bytes) en un formato orientado a columnas (a través de un mapa de bits). Otro ejemplo es el uso de codificación por longitud de ejecución para codificar una columna.

Tamaño comprimido

La orientación por columnas se beneficia de un tamaño comprimido más pequeño. Esto es el resultado de una mayor homogeneidad dentro de una columna que dentro de varias filas. [4] [3]

Conversión e intercambio

Dado que ambas orientaciones representan los mismos datos, es posible convertir un conjunto de datos orientado a filas en un conjunto de datos orientado a columnas y viceversa a expensas del cálculo. En particular, los motores de consulta avanzados a menudo aprovechan las ventajas de cada orientación y convierten de una orientación a la otra como parte de su ejecución. Como ejemplo, una consulta de Apache Spark puede

  1. Leer datos de Apache Parquet (orientado a columnas)
  2. cargarlo en el formato interno en memoria de Spark (orientado a filas)
  3. convertirlo a Apache Arrow para un cálculo específico (orientado a columnas)
  4. escríbelo en Apache Avro para transmisión (orientado a filas)

Referencias

  1. ^ abc Abadi, Daniel J.; Madden, Samuel R.; Hachem, Nabil (2008). "Almacenes de columnas frente a almacenes de filas: ¿en qué se diferencian realmente?". Actas de la conferencia internacional ACM SIGMOD de 2008 sobre gestión de datos . págs. 967–980. doi :10.1145/1376616.1376712. ISBN 978-1-60558-102-6.
  2. ^ abcd Funke, Florian; Kemper, Alfons; Neumann, Thomas (2012). "Compactación de datos transaccionales en bases de datos híbridas OLTP y OLAP". Actas de la Fundación VLDB . 5 (11): 1424–1435. doi :10.14778/2350229.2350258.
  3. ^ abcd "Apache ORC" . Consultado el 21 de mayo de 2024 .
  4. ^ abcd "Apache Parquet" . Consultado el 21 de mayo de 2024 .
  5. ^ ab "Flecha Apache" . Consultado el 21 de mayo de 2024 .
  6. ^ "Apache Avro" . Consultado el 21 de mayo de 2024 .
  7. ^ Richard, Golden G.; Case, Andrew (2014). "En lugar de intercambio: análisis de RAM comprimida en Mac OS X y Linux". Investigación digital . 11 : S3–S12. doi : 10.1016/j.diin.2014.05.011 .
  8. ^ abc M. Frans Kaashoek, Jerome H. Saltzer (2009). Principios de diseño de sistemas informáticos . Morgan Kaufmann. ISBN 978-0-12-374957-4.
  9. ^ "Capítulo 4 Espacio de direcciones de proceso (documentación del núcleo de Linux)" . Consultado el 21 de mayo de 2024 .