La orientación de datos es la representación de datos tabulares en un modelo de memoria lineal , como en disco o en memoria . Las dos representaciones más comunes son la orientada a columnas (formato columnar) y la orientada a filas (formato de fila). [ 1 ] [ 2 ]
La elección de la orientación de los datos implica 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 con mayor frecuencia en el procesamiento de transacciones en línea (OLTP) y los formatos orientados a columnas se utilizan con mayor frecuencia en el procesamiento analítico en línea (OLAP). [ 2 ]
Ejemplos de formatos orientados a columnas incluyen Apache ORC , [ 3 ] Apache Parquet , [ 4 ] Apache Arrow , [ 5 ] formatos utilizados por BigQuery , Amazon Redshift y Snowflake . Ejemplos predominantes de formatos orientados a filas incluyen CSV, formatos utilizados en la mayoría de las bases de datos relacionales ( Oracle , MySQL, etc.), el formato en memoria de Apache Spark y Apache Avro . [ 6 ]
Descripción
Los datos tabulares son bidimensionales: se modelan como filas y columnas. Sin embargo, los sistemas informáticos representan 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 mapear su esquema bidimensional a un espacio unidimensional. La orientación de los datos depende de la decisión tomada en este mapeo. Existen dos mapeos principales: orientado a filas y orientado a columnas. [ 1 ] [ 2 ]
Orientado a filas
En una base de datos orientada a filas, también conocida como almacén de filas, los elementos de la tabla
se almacenan linealmente como
Es decir, cada fila de la tabla se ubica una tras otra. En esta orientación, los valores de la misma fila están próximos en el espacio (por ejemplo, direcciones similares en un espacio direccionable).
Ejemplos
- CSV
- Formatos de PostgreSQL en disco y en memoria
- Formato en memoria de Apache Spark
- Apache Avro
- MySQL
- Conjuntos de datos SAS
Orientado a columnas
En una base de datos orientada a columnas, también conocida como almacén de columnas, los elementos de la tabla
se almacenan linealmente como
Es decir, cada columna de la tabla se ubica una tras otra. En esta orientación, los valores de la misma columna están próximos en el espacio (por ejemplo, direcciones similares en un espacio direccionable).
Ejemplos
- Formatos de almacenamiento y en memoria de BigQuery
- Parquet Apache
- ORC Apache
- Flecha Apache
- Formato en memoria de DuckDB
- Formato en memoria de Pandas
- Dataframes de R [ 10 ]
Consulte la lista de sistemas de gestión de bases de datos orientados a columnas para ver más ejemplos.
Compensación
La orientación de datos es una decisión arquitectónica importante en los sistemas que manejan datos porque genera importantes compensaciones en el rendimiento y el almacenamiento . [ 8 ] A continuación se muestran algunas dimensiones de esta compensación.
Acceso aleatorio
Las ventajas de la orientación a filas provienen del acceso aleatorio rápido a las filas. Las ventajas de la orientación a columnas provienen del acceso aleatorio rápido a las columnas. En ambos casos, esto se debe a una menor cantidad de fallos de página o de caché al acceder a los datos. [ 8 ]
Insertar
La orientación a filas se beneficia de la rápida inserción de una nueva fila. La orientación a columnas se beneficia de la rápida inserción 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
Las ventajas de la orientación a filas se benefician del acceso rápido bajo un filtro. Las ventajas de la orientación a columnas se benefician del acceso rápido bajo una proyección . [ 4 ] [ 3 ]
rendimiento de cálculo
Las ventajas de la orientación a columnas se deben a las operaciones analíticas rápidas. Esto se debe a la posibilidad de aprovechar las instrucciones SIMD . [ 5 ]
Tamaño sin comprimir
La orientación a columnas ofrece ventajas gracias a un menor tamaño sin comprimir. Esto se debe a la posibilidad que brinda esta orientación de representar ciertos tipos de datos con codificaciones específicas. [ 4 ] [ 3 ]
Por ejemplo, una tabla de 128 filas con una columna booleana requiere 128 bytes en formato orientado a filas (un byte por valor booleano), pero 128 bits (16 bytes) en formato orientado a columnas (mediante un mapa de bits). Otro ejemplo es el uso de la codificación de longitud variable para codificar una columna.
Tamaño comprimido
Las ventajas de la orientación a columnas se deben a un menor tamaño comprimido. Esto se debe a 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 costa de un mayor coste computacional. En particular, los motores de consulta avanzados suelen aprovechar las ventajas de cada orientación y realizan conversiones entre ellas como parte de su ejecución. Por ejemplo, una consulta de Apache Spark puede
- Leer datos de Apache Parquet (orientado a columnas)
- Cárguelo en el formato interno en memoria de Spark (orientado a filas).
- Conviértalo a Apache Arrow para un cálculo específico (orientado a columnas).
- Escríbelo en Apache Avro para transmisión (orientada a filas).
Referencias
- 1 2 3 Abadi, Daniel J.; Madden, Samuel R.; Hachem, Nabil (2008). "Almacenes columnares vs. almacenes filales: ¿Qué tan diferentes son realmente?". Actas de la conferencia internacional ACM SIGMOD 2008 sobre gestión de datos . págs. 967–980 . doi : 10.1145/1376616.1376712 . ISBN 978-1-60558-102-6.
- 1 2 3 4 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 .
- 1 2 3 4 "Apache ORC" . Consultado el 21 de mayo de 2024 .
- 1 2 3 4 "Parque Apache" . Consultado el 21 de mayo de 2024 .
- 1 2 "Apache Arrow" . Consultado el 21 de mayo de 2024 .
- ↑ "Apache Avro" . Consultado el 21 de mayo de 2024 .
- ↑ Richard, Golden G.; Case, Andrew (2014). "En lugar de swap: Análisis de RAM comprimida en Mac OS X y Linux" . Digital Investigation . 11 : S3– S12. doi : 10.1016/j.diin.2014.05.011 .
- ^ M. Frans Kaashoek, Jerome H. Saltzer (2009) . Principios del diseño de sistemas informáticos . Morgan Kaufman. ISBN 978-0-12-374957-4.
- ↑ "Capítulo 4 Espacio de direcciones de procesos (documentación del kernel de Linux)" . Consultado el 21 de mayo de 2024 .
- ↑ "Conceptos básicos de programación en R: 9 marcos de datos" . www.gastonsanchez.com . Consultado el 19 de enero de 2025 .
- Modelos de bases de datos