Apache Avro 文档概况
Posted 拉风小宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Avro 文档概况相关的知识,希望对你有一定的参考价值。
文章主题来源于英文源文档 -> Apache Avro™ 1.11.0 文档
1. 介绍
Apache Avro™ 是一个数据序列化(data serialization)框架
Avro 提供如下:
- 丰富的数据结构
- 一种紧凑、快速的二进制数据格式
- 一个容器文件,用于存储持久数据
- 远程过程调用 Remote procedure call (RPC)
- 与动态语言的简单集成。代码生成不需要读取或写入数据文件,也不需要使用或实现 RPC协议。代码生成作为一种可选的优化,只为静态类型语言实现
2. Schemas(模式)
Avro 依赖于模式。读取 Avro 数据时,写入时使用的模式始终存在。这允许在没有每个值开销的情况下写入每个数据,从而使序列化既快速又小。这也便于使用动态脚本语言,因为数据及其模式是完全自描述的。
当 Avro 数据存储在文件中时,它的模式也随之存储,以便以后任何程序都可以处理文件。如果读取数据的程序需要不同的模式,这很容易解决,因为两种模式都存在。
在 RPC 中使用 Avro 时,客户端和服务器在连接握手中交换模式(这可以优化,使得对于大多数调用,实际上并不传输模式)。由于客户端和服务器都具有对方的完整模式,因此可以轻松解决相同命名字段之间的对应关系,缺少字段,额外字段等.
Avro 模式是用 JSON 定义的。这有助于在已经具有 JSON 库的语言中实现。
3. 与其他框架的比较
Avro 提供类似于 Thrift、Protocol Buffers 等系统的功能。Avro 在以下基本方面与这些系统不同
- 动态类型:Avro 不需要生成代码。数据总是伴随着一个模式,该模式允许在没有代码生成、静态数据类型等的情况下完全处理该数据。这有助于构建通用数据处理系统和语言。
- 未标记数据:由于在读取数据时存在模式,因此需要用数据编码的类型信息要少得多,从而导致更小的序列化大小。
- 没有手动分配的字段 ID:当架构更改时,处理数据时始终存在旧架构和新架构,因此可以使用字段名称象征性地解决差异。
以上是关于Apache Avro 文档概况的主要内容,如果未能解决你的问题,请参考以下文章
Apache Avro for c# vs Microsoft.Avro.Core
Apache Avro 1.11.0 入门 (Java 版本)