Apache Avro简介


简介

Apache Avro是一个数据序列化方法。

Avro提供:

  • 丰富的数据结构。
  • 紧凑、高效的二进制数据格式。
  • 容器文件,用于存储持久数据。
  • 远程过程调用(RPC)。
  • 易于集成到动态语言的特性。
  • 无论是读写数据文件,还是使用或实现RPC协议,都无需代码生成。代码生成是一个优化选项且只对静态类型语言的实现有意义。

Schema

Avro依赖于schema。当读取Avro数据时,总是能够获取到写入该数据时用到的schema。这样一来,每次写入数据都无需多余的开销,进而加快序列化速度、减小序列的大小。在动态的、脚本式语言中使用Avro也会变得更加容易,因为数据配合它的schema可以进行完整的自我描述。

当Avro数据被存入一个文件时,它的schema也会随之存入。随后,文件可以被任何程序处理。如果读取数据的程序期望另一个schema,这也容易解决,因为两个schema同时可以获取到。

当把Avro用于RPC时,客户端和服务器在连接握手时互换schema。(这一点还可以优化,对于大部分调用而言,实际上不会传输schema)。客户端和服务器都拥有对方的全部的schema,因此,在通信中的命名域、缺失域、附加域等都可以很容易被处理。

Avro schema是使用JSON定义的。在已经存在JSON库的语言中实现起来会更加方便。

同类比较

Thrift、Protocol Buffers等也提供了和Avro类似的功能。Avro区别于它们的主要方面如下:

  • 动态类型:Avro不要求代码生成。数据总是和schema一起,无需代码生成和静态数据类型等就可以完整解析。这有助于在多种语言中构建通用的数据处理方法。
  • 无标记数据:由于读取数据时总可以获取到schema,因此,极少的类型信息会被编码到数据中。这样使得序列化之后的大小更小。
  • 无手动分配的域标识:当一个schema发生变化,处理数据时新的和旧的schema都可以获取到。所以,二者的差异使用域名即可解决。

参考链接

原始英文链接:http://avro.apache.org/docs/1.8.1/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值