En los sistemas de gestión de bases de datos , el archivo de columnas de registros [1] o RCFile es una estructura de ubicación de datos que determina cómo almacenar tablas relacionales en clústeres de computadoras . Está diseñado para sistemas que utilizan el marco MapReduce . La estructura RCFile incluye un formato de almacenamiento de datos, un enfoque de compresión de datos y técnicas de optimización para la lectura de datos. Es capaz de cumplir con los cuatro requisitos de ubicación de datos: (1) carga rápida de datos, (2) procesamiento rápido de consultas, (3) utilización altamente eficiente del espacio de almacenamiento y (4) una fuerte adaptabilidad a patrones dinámicos de acceso a datos.
RCFile es el resultado de la investigación y los esfuerzos de colaboración de Facebook , la Universidad Estatal de Ohio y el Instituto de Tecnología Informática de la Academia China de Ciencias .
Por ejemplo, una tabla en una base de datos consta de 4 columnas (c1 a c4):
Para serializar la tabla, RCFile realiza particiones de esta tabla primero horizontalmente y luego verticalmente, en lugar de solo hacerlo horizontalmente como en el DBMS orientado a filas (almacén de filas). La partición horizontal primero dividirá la tabla en varios grupos de filas según el tamaño del grupo de filas , que es un valor especificado por el usuario que determina el tamaño de cada grupo de filas. Por ejemplo, la tabla mencionada anteriormente se puede dividir en dos grupos de filas si el usuario especifica tres filas como el tamaño de cada grupo de filas.
Luego, en cada grupo de filas, RCFile divide los datos verticalmente como en un almacén de columnas. De esta manera, la tabla se serializará como:
Grupo de Fila 1 Grupo de Fila 2 11, 21, 31; 41, 51; 12, 22, 32; 42, 52; 13, 23, 33; 43, 53; 14, 24, 34; 44, 54;
Dentro de cada grupo de filas, las columnas se comprimen para reducir el uso de espacio de almacenamiento. Dado que los datos de una columna se almacenan de forma adyacente, se puede detectar el patrón de una columna y, por lo tanto, se puede seleccionar el algoritmo de compresión adecuado para una alta tasa de compresión.
El almacenamiento en columnas es más eficiente cuando una consulta solo requiere un subconjunto de columnas, porque el almacenamiento en columnas solo lee las columnas necesarias de los discos, pero el almacenamiento en filas leerá una fila entera.
RCFile combina las ventajas del almacenamiento en filas y columnas mediante particiones horizontales y verticales. Con la partición horizontal, RCFile coloca todas las columnas de una fila en una sola máquina y, por lo tanto, puede eliminar los costos de red adicionales al construir una fila. Con la partición vertical, para una consulta, RCFile solo leerá las columnas necesarias de los discos y, por lo tanto, puede eliminar los costos de E/S locales innecesarios. Además, en cada grupo de filas, la compresión de datos se puede realizar mediante el uso de algoritmos de compresión utilizados en el almacenamiento en columnas .
Por ejemplo, una base de datos podría tener esta tabla:
Esta sencilla tabla incluye un identificador de empleado (EmpId), campos de nombre (Apellido y Nombre) y un salario (Salario). Este formato bidimensional existe solo en teoría; en la práctica, el hardware de almacenamiento requiere que los datos se serialicen en una forma u otra.
En los sistemas basados en MapReduce, los datos normalmente se almacenan en un sistema distribuido, como Hadoop Distributed File System (HDFS) , y se pueden almacenar diferentes bloques de datos en diferentes máquinas. Por lo tanto, para el almacenamiento en columnas en MapReduce, se pueden almacenar diferentes grupos de columnas en diferentes máquinas, lo que introduce costos de red adicionales cuando una consulta proyecta columnas ubicadas en diferentes máquinas. Para los sistemas basados en MapReduce, la ventaja del almacenamiento en filas es que no hay costos de red adicionales para construir una fila en el procesamiento de consultas, y la ventaja del almacenamiento en columnas es que no hay costos de E/S locales innecesarios cuando se leen datos de los discos.
La solución común al problema de almacenamiento es serializar cada fila de datos, de la siguiente manera:
001:10, Smith, Joe, 40000;002:12, Jones, Mary, 50000;003:11, Johnson, Cathy, 44000;004:22, Jones, Bob, 55000;
Los sistemas basados en filas están diseñados para devolver de manera eficiente los datos de una fila completa o de un registro completo en la menor cantidad de operaciones posible. Esto se adapta a los casos de uso en los que el sistema intenta recuperar toda la información sobre un objeto en particular, por ejemplo, la información completa sobre un contacto en un sistema de rolodex o la información completa sobre un producto en un sistema de compras en línea.
Los sistemas basados en filas no son eficientes para realizar operaciones que se aplican a todo el conjunto de datos, en lugar de a un registro específico. Por ejemplo, para encontrar todos los registros de la tabla de ejemplo que tienen salarios entre 40.000 y 50.000, el sistema basado en filas tendría que buscar en todo el conjunto de datos los registros que coincidan. Si bien la tabla de ejemplo que se muestra arriba puede caber en un solo bloque de disco, una tabla con incluso unos pocos cientos de filas no lo haría, por lo que se necesitarían múltiples operaciones de disco para recuperar los datos.
Un sistema orientado a columnas serializa todos los valores de una columna juntos y luego los valores de la siguiente columna. Para nuestra tabla de ejemplo, los datos se almacenarían de esta manera:
10:001,12:002,11:003,22:004;Smith:001,Jones:002,Johnson:003,Jones:004;Joe:001,María:002,Cathy:003,Bob:004;40000:001,50000:002,44000:003,55000:004;
La diferencia se puede ver más claramente en esta modificación común:
...;Smith:001,Jones:002,004,Johnson:003;...
Dos de los registros almacenan el mismo valor, "Jones", por lo que ahora es posible almacenarlo en el sistema orientado a columnas solo una vez en lugar de dos. Para muchas búsquedas comunes, como "encontrar a todas las personas con el apellido Jones", ahora se puede recuperar la respuesta en una sola operación.
La eficacia operativa de un sistema orientado a columnas depende en gran medida de las operaciones que se estén automatizando. Las operaciones que recuperan datos de objetos serían más lentas y requerirían numerosas operaciones de disco para reunir datos de diferentes columnas y crear un registro de fila completa. Sin embargo, estas operaciones de fila completa son generalmente poco frecuentes. En la mayoría de los casos, solo se recupera un subconjunto limitado de datos. En una aplicación de rolodex, por ejemplo, las operaciones que recopilan los nombres y apellidos de muchas filas para crear una lista de contactos son mucho más comunes que las operaciones que leen los datos de la dirección de domicilio.
RCFile se ha adoptado en sistemas del mundo real para el análisis de big data.
En los años siguientes, otros formatos de datos de Hadoop también se hicieron populares. En febrero de 2013, Hortonworks anunció un formato de archivo ORC (Optimized Row Columnar) . [13] Un mes después, se anunció el formato Apache Parquet , desarrollado por Cloudera y Twitter . [14]
{{cite conference}}
: CS1 maint: varios nombres: lista de autores ( enlace )