Big Data: schema on read vs schema on write

A raíz de una consulta recibida en el post anterior sobre procesos ETL en entornos Big Data a continuación mostramos 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. 

 

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:

  • Schema on write (sql rdbms):

1. Creamos el schema:

create table clientes (cod_cliente int, des_cliente varchar(50), ...)

2. Volcamos los datos:

bulk insert cliente from 'C:\temp\clientes.txt' with delimitier = ';'

3. Leemos los datos:

select cod_cliente, descliente from clientes

 

  • 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.