Loading
0

Avro

产品特点:

Avro拥有以下特点:

  • 丰富的数据结构类型;
  • 快速可压缩的二进制数据形式,对数据二进制序列化后可以节约数据存储空间和网络传输带宽;
  • 存储持久数据的文件容器;
  • 可以实现远程过程调用RPC;
  • 简单的动态语言结合功能。

Avro支持跨编程语言实现(C, C++, C#,Java, Python, Ruby, PHP),类似于Thrift,但是Avro的显著特征是:avro依赖于模式,动态加载相关数据的模式,Avro数据的读写操作很频繁,而这些操作使用的都是模式,这样就减少写入每个数据文件的开销,使得序列化快速而又轻巧。这种数据及其模式的自我描述方便了动态脚本语言的使用。当Avro数据存储到文件中时,它的模式也随之存储,这样任何程序都可以对文件进行处理。如果读取数据时使用的模式与写入数据时使用的模式不同,也很容易解决,因为读取和写入的模式都是已知的。

Avro和动态语言结合后,读/写数据文件和使用RPC协议都不需要生成代码,而代码生成作为一种可选的优化只需要在静态类型语言中实现。

Avro依赖于模式(Schema)。通过模式定义各种数据结构,只有确定了模式才能对数据进行解释,所以在数据的序列化和反序列化之前,必须先确定模式的结构。正是模式的引入,使得数据具有了自描述的功能,同时能够实现动态加载,另外与其他的数据序列化系统如Thrift相比,数据之间不存在其他的任何标识,有利于提高数据处理的效率。

支持的数据类型 

Avro支持的简单数据类型包括null、boolean、int、long、float、double、bytes和string。在这里,null是一种特殊类型,对应于没有数据,并可以用于代替任何数据类型。   

Avro支持的复杂类型包括以下几个:

  • Record:大致相当于C语言的结构体。Record有名称以及可选的名称空间、文档和别名。它包含一个命名属性的列表,这些属性可以是任何Avro类型。
  • Enum:值的枚举。Enum有名字、可选的名称空间、文档和别名,并包含一个符号列表(合法的JSON字符串)。
  • Array:相同类型条目的集合。
  • Map:字符串类型键和特定类型值的映射表。
  • Union:表示值的or选项。Union的常见用法是指定可以为空的值。