数据编码与数据流模式解析
1. 编码格式与模式
1.1 动态生成模式与代码生成
Thrift和Protocol Buffers不支持动态生成模式,而Avro支持。Thrift和Protocol Buffers依赖代码生成,在定义模式后,可生成在所选编程语言中实现该模式的代码,这在Java、C++或C#等静态类型语言中很有用,能实现高效的内存结构、类型检查和自动补全。
但在JavaScript、Ruby或Python等动态类型语言中,代码生成意义不大,因为没有编译时类型检查器,且这些语言通常避免显式的编译步骤。对于动态生成的模式,代码生成可能成为获取数据的障碍。
Avro为静态类型编程语言提供可选的代码生成,但也可在不生成代码的情况下使用。若有对象容器文件(嵌入了写入者的模式),可使用Avro库打开并查看数据,就像查看JSON文件一样,因为文件包含了所有必要的元数据,具有自描述性。在像Apache Pig这样的动态类型数据处理语言中,可直接打开Avro文件进行分析,并将派生数据集以Avro格式写入输出文件,无需考虑模式。
1.2 模式的优点
Protocol Buffers、Thrift和Avro都使用模式来描述二进制编码格式,其模式语言比XML Schema或JSON Schema简单,虽然后两者支持更详细的验证规则。这些编码格式易于实现和使用,支持多种编程语言。
它们的思想并非全新,与1984年标准化的ASN.1有很多共同之处,ASN.1用于定义各种网络协议,其二进制编码(DER)仍用于编码SSL证书。但ASN.1非常复杂且文档不完善,不适合新应用。
许多数据系统也实现了
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



