El concepto
1. La serialización de datos es convertir un objeto o estructura de datos en un formato específico, para que pueda transmitirse en la red, o puede almacenarse en la memoria o en un archivo
2. La deserialización es la operación opuesta, el objeto es datos serializados El enfoque de la serialización de datos restaurada
en los datos es el intercambio y la transmisión de datos.
Medida
1. Tamaño de datos después de la serialización. Debido a que los datos serializados deben transmitirse a través de la red o almacenarse en la memoria o los archivos, cuanto menor sea la cantidad de datos, menor será el tiempo necesario para almacenar o transmitir
2. El tiempo y el consumo de CPU de la serialización y deserialización
Si puede cruzar idiomas o plataformas. Porque en el desarrollo empresarial actual, un proyecto a menudo usa diferentes lenguajes para la arquitectura y la implementación. En un sistema de red heterogéneo, los dos lados de la red pueden usar diferentes lenguajes o diferentes sistemas operativos, por ejemplo, Java se usa en un extremo y C ++ se usa en el otro; o Windows se usa en un extremo y el otro en el otro. Es un sistema Linux, entonces esta vez requiere que los datos serializados sean analizados y transmitidos entre diferentes idiomas y diferentes plataformas.
Problemas con el mecanismo de serialización / deserialización nativo de Java
1. La serialización nativa de Java no puede tomar la estructura del objeto, lo que resulta en una gran cantidad de datos al serializar múltiples objetos. Cuando se utiliza
la serialización nativa de Java, el objeto se analiza y analiza según el formato especificado por Java. Es un formato de código de bytes, por lo que cuando otros idiomas reciben este objeto en este momento, no se puede analizar o es más difícil de analizar. Es decir, el mecanismo de serialización nativo de Java no se usa en idiomas o plataformas.
Marco de serialización común (Avro)
El concepto
1. Avro es un marco de llamada a procedimiento remoto y serialización de datos, desarrollado dentro del proyecto Apache Hadoop.
2. Utiliza JSON para definir tipos de datos y protocolos de comunicación, y utiliza un formato binario comprimido para serializar datos
. 3. Principalmente Utilizado en Hadoop, puede proporcionar un formato serializado para datos persistentes y un formato de telegrama para la comunicación entre los nodos Hadoop y desde los programas del cliente a los servicios de Hadoop a
través de avro, serializado cada vez, de acuerdo con el esquema ) Archivos para serializar, pueden mejorar el rendimiento
Caracteristicas
1. Tipos de estructura de datos enriquecidos, 8 tipos de datos básicos y 6 tipos complejos
2. Forma binaria comprimible rápida
3. Proporcione archivos contenedor para datos persistentes
4. Procedimiento remoto llame a la
función de combinación de lenguaje dinámico simple de marco RPC , Después de combinar Avro y lenguajes dinámicos, ni leer ni escribir archivos de datos ni usar el protocolo RPC requiere la generación de código, y la generación de código como optimización opcional solo vale la pena implementarla en lenguajes estáticamente tipados. La generación de código como una optimización opcional solo vale la pena implementarla en un lenguaje de tipo estático
Tipo simple
Tipo de datos | Explicación |
nulo | Sin valor |
booleano | Un booleano binario |
En t | Entero con signo de 32 bits |
largo | Entero con signo de 64 bits |
flotador | Coma flotante de precisión simple de 32 bits |
doble | Número de coma flotante de doble precisión de 64 bits |
bytes | Secuencia de bytes sin signo de 8 bits |
cuerda | Secuencia de caracteres |
Tipo complejo
1. Avro define seis tipos de datos complejos, cada uno de los cuales tiene atributos únicos. La siguiente tabla describe cada tipo de datos complejos
2. Cada tipo de datos complejos contiene sus propios atributos, entre los cuales Algunos atributos son obligatorios y otros opcionales
3. Aquí, se debe explicar el valor predeterminado del atributo de campo en el tipo de registro. Cuando un atributo de campo en los datos de instancia del esquema de registro no proporciona datos de instancia, se proporciona el valor predeterminado. Para valores específicos, consulte La tabla de abajo. El valor predeterminado del campo Unión está determinado por el primer Esquema en la definición de Unión.
Tipo | Atributos | Explicación |
Grabar | clase | |
nombre | una cadena JSON que proporciona el nombre del registro (requerido). | |
espacio de nombres | una cadena JSON que califica el nombre (opcional). | |
Doc | una cadena JSON que proporciona documentación al usuario de este esquema (opcional). | |
alias | una matriz JSON de cadenas, que proporciona nombres alternativos para este registro (opcional). | |
campos | una matriz JSON, que enumera los campos (obligatorios). | |
nombre | una cadena JSON | |
tipo | un esquema / una cadena de registro definido. | |
defecto | Un valor predeterminado para el campo cuando falta. | |
orden | ordenamiento de este campo. | |
Enumeraciones | enumeración | |
nombre | una cadena JSON que proporciona el nombre de la enumeración (obligatorio). | |
espacio de nombres | una cadena JSON que califica el nombre. | |
Doc | una cadena JSON que proporciona documentación al usuario de este esquema (opcional). | |
alias | una matriz JSON de cadenas, que proporciona nombres alternativos para esta enumeración (opcional) | |
símbolos | una matriz JSON, que enumera símbolos, como cadenas JSON (obligatorio). Todos los símbolos en una enumeración deben ser únicos. | |
Matrices | formación | |
artículos | El esquema de los elementos de la matriz. | |
Mapas | mapa | |
valores | El esquema de los valores del mapa. | |
Fijo | fijo | |
nombre | una cadena nombrando esto fijo (requerido). | |
espacio de nombres | Una cadena que califica el nombre. | |
alias | una matriz JSON de cadenas, que proporciona nombres alternativos para esta enumeración (opcional). | |
Talla | un número entero, que especifica el número de bytes por valor (requerido). | |
Sindicatos | una matriz JSON |
Ilustrar
Tipo avro | tipo json | Ejemplos |
nulo | nulo | nulo |
booleano | booleano | cierto |
int, largo | entero | 1 |
flotador, doble | número | 1.1 |
bytes | cuerda | "\ u00FF" |
cuerda | cuerda | "foo" |
grabar | objeto | {"a": 1} |
enumeración | cuerda | "FOO" |
formación | formación | [1] |
mapa | objeto | {"a": 1} |
fijo | cuerda | "\ u00ff" |
Ejemplos de uso
Archivo POM
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation = "http: / /maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<modelVersion> 4.0.0 </modelVersion>
<groupId> com.blb < / groupId>
<artifactId> avro </artifactId>
<version> 0.0.1-SNAPSHOT </version>
<packaging> jar </packaging>
<dependencies>
<dependency>
<groupId> org.apache.avro </groupId>
< artifactId> avro </artifactId>
<versión> 1.8.2 </version>
</dependency>
<dependency>
<groupId> org.apache.avro </groupId>
<artifactId> avro-tools </artifactId>
<version> 1.8.2 </version>
</dependency>
<dependency>
<groupId> org.apache.avro </groupId>
<artifactId> avro-maven-plugin </artifactId>
<version> 1.8.2 </ version >
</dependency>
<dependency>
<groupId> org.apache.avro </groupId>
<artifactId> avro-compiler </artifactId>
<version> 1.8.2 </version>
</dependency>
<dependency>
<groupId> org.apache.avro </groupId>
<artifactId> avro-ipc </artifactId>
<version> 1.8.2 </version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId> org.apache.maven.plugins </ groupId>
<artifactId> maven-compiler-plugin </ artifactId>
<version> 3.1 </ version>
<configuration>
<! -En general, el destino y la fuente son consistentes, pero a veces, para permitir que el programa se ejecute en otras versiones de jdk (para la versión baja de destino jdk, el código fuente no puede usar la sintaxis que no es compatible con la versión baja jdk) , Habrá casos en los que el destino sea diferente del
origen- > <source> 1.8 </ source> <! - Versión JDK utilizada por el código fuente->
<target> 1.8 </ target> <! - Clase de destino que se generará La versión compilada del archivo->
<codificación> UTF-8 </ codificación> <! - Codificación de juego de caracteres->
</ configuration>
</plugin>
<plugin>
<groupId> org.apache.avro </groupId>
</configuration>
<artifactId> avro-maven-plugin </artifactId>
<version> 1.8.2 </version>
<executions>
<execution>
<phase> generate-sources </phase>
<goals>
<goal> esquema </goal>
< / goals>
<configuration>
<sourceDirectory> $ {project.basedir} / src / main / avro / </sourceDirectory>
<outputDirectory> $ {project.basedir} / src / main / java / </outputDirectory>
</execution>
</executions>
</plugin>
<plugin>
<groupId> org.apache.maven.plugins </groupId>
<artifactId> maven-compiler-plugin </artifactId>
<configuration>
<source> 1.8 </source>
<target> 1.8 </target>
</ configuración>
</plugin>
</plugins>
</build>
</project>
una cadena JSON que proporciona documentación al usuario de este esquema (opcional). |