jueves, 17 de mayo de 2018

Apache Avro


Apache Avro es un sistema de serialización de datos.

Avro proporciona:
  • Estructuras de datos ricas
  • Un formato de datos binario compacto, rápido.
  • Un archivo contenedor, para almacenar datos persistentes.
  • Llamada a procedimiento remoto (RPC).
  • Integración simple con lenguajes dinámicos. No se requiere la generación de código para leer o escribir archivos de datos ni para usar o implementar protocolos RPC. 
Avro se basa en esquemas. Cuando se leen datos Avro, el esquema utilizado al escribirlo siempre está presente. Esto permite que cada dato se escriba sin gastos generales por valor, lo que hace que la serialización sea rápida y pequeña. Esto también facilita el uso con lenguajes dinámicos de scripting, ya que los datos, junto con su esquema, son completamente autodescriptivos.
Cuando los datos de Avro se almacenan en un archivo, su esquema se almacena con él, de modo que los archivos pueden ser procesados posteriormente por cualquier programa. Si el programa que lee los datos espera un esquema diferente, esto se puede resolver fácilmente, ya que ambos esquemas están presentes.

Cuando se usa Avro en RPC, el cliente y el servidor intercambian esquemas en el enlace de conexión. (Esto se puede optimizar para que, en la mayoría de las llamadas, no se transmitan realmente esquemas.) Dado que tanto el cliente como el servidor tienen el esquema completo del otro, la correspondencia entre los mismos campos con nombre, campos faltantes, campos adicionales, etc. puede resolverse fácilmente .

Los esquemas Avro se definen con JSON. Esto facilita la implementación en Lenguajes que ya tienen bibliotecas JSON. Avro proporciona una funcionalidad similar a sistemas como Thrift, Protocol Buffers, etc. Avro difiere de estos sistemas en los siguientes aspectos fundamentales.

  • Tipado dinámico: Avro no requiere que se genere ese código. Los datos siempre van acompañados de un esquema que permite el procesamiento completo de esos datos sin generación de códigos, tipos de datos estáticos, etc. Esto facilita la construcción de sistemas e lenguajes genéricos de procesamiento de datos.
  • Datos no etiquetados: dado que el esquema está presente cuando se leen los datos, es necesario codificar considerablemente menos información de tipo con los datos, lo que da como resultado un tamaño de serialización más pequeño.

No hay identificadores de campo asignados manualmente: cuando un esquema cambia, tanto el esquema antiguo como el nuevo siempre están presentes cuando se procesan los datos, por lo que las diferencias se pueden resolver simbólicamente, usando los nombres de los campos.