jueves, 17 de abril de 2014

Big data: schema on read vs schema on write (ejemplo SAS - Hadoop)

Como continuación post anterior mostramos en este las principales diferencias entre el “schema on write” que es el que ya conocemos de las BBDD tradicionales y el “schema on read” más ligado a la arquitectura Big Data. Incluyendo un ejemplo de SAS (schema on read) y de Hadoop (schema on write)

Una primera definición podría ser:
  • Schema on write: Necesita que la estructura del objeto de base de datos esté definida previa a la carga y los datos son validados contra esta estructura.
  • Schema on read:  En este caso, la estructura de los objetos de BBDD no está definida previa a la carga y no hay ,por tanto, validación contra estructura. La estructura de BBDD se define en la lectura, con la flexibilidad de poder cambiar la estructura en base  los datos a obtener en cada tipo de lectura.

A continuación mostramos un ejemplo, en el que se ven las diferencias entre un caso de schema on read realizado con tablas SAS y un caso de schema on write con Hadoop:

  • Schema on write (SAS SQL):

1. Creamos el schema:

proc sql;
create table clientes_sas (cod_cliente 8., des_cliente $50, ...);
quit;

2. Volcamos los datos:

data clientes_input;
      infile 'C:\temp\clientes.txt' delimitier = ';' ;
      input cod_clientes    8.
            des_clientes    $50;
 run;

       proc append base=clientes_sas new=clientes_input; 
run;

3. Leemos los datos:

proc sql;
create tabla tab_clientes as (
select cod_cliente, descliente from clientes_sas );
quit;

  • Schema on read (Hadoop):

1. Volcado de datos:

hdfs dfs - copyFromLocal /temp/clientes.txt
/user/hadoop/clientes

2. Lectura de datos:

hadoop jar Hadoop-streaming.jar
-mapper clientes-mapper.py
-reducer clientes-reducer.py
-input /user/hadoop/clientes/clientes.txt
-output /user/hadoop/output/query1

Ventajas e inconvenientes de cada una de las arquitecturas:

  • Schema on write:

Al realizar la validación de datos contra la estructura en tiempo de carga, son los volcados de datos los que son penalizados, mientras que las lecturas son más rápidas. Al existir una estructura predefinida, tenemos una única forma de visualizar los datos.  Cualquier cambio en el esquema (nueva columna), obliga a reprocesar. Al tener estructuras predefinidas la relación entre entidades es sencilla de obtener y  los datos pueden quedar documentados en la estructura. Por otra parte, bajo este esquema resulta complicado mapear datos no estructurados y resulta muy costoso mantener el nivel de detalle más atómico para volúmenes de datos altos.
  • Schema on read:

Al no realizar validaciones en tiempo de carga, los volcados son más rápidos, la penalización en tiempos pueda estar en la lectura que es cuando tenemos una estructura. Al no haber un esquema predefinido, tenemos la flexibilidad de poder leer los datos según la vista que nos interese en cada tipo de consulta, por contra no existe una documentación clara de los datos. Este esquema es muy apropiado para datos no estructurados y permite guardar el nivel de detalle más atómico, incluso en volúmenes de datos altos, aunque necesita una capacidad de proceso muy alta.

El uso de uno u otro esquema va a depender mucho del tipo de datos a almacenar/consultar y de la capacidad de proceso con la que contamos.

No hay comentarios:

Publicar un comentario