在“Designing Data-Intensive Applications - CHAPTER 4 Encoding and Evolution - Formats for Encoding Data - Avro”中,举例展示了 Avro 如何进行编码。
示例记录如下:
{
"userName": "Martin",
"favoriteNumber": 1337,
"interests": ["daydreaming", "hacking"]
}
使用 Avro 编写的示例模式如下:
record Person {
string userName;
union { null, long } favoriteNumber = null;
array<string> interests;
}
示例记录被 Avro 编码之后为:
0x0c
的最后一位代表 sign,sign 是什么呢?0x02
代表union branch 1 (long, not null)
,怎么理解union branch 1 (long, not null)
?P.S. 因为是第一次接触 Avro,不太清楚应该怎么搜索相关信息,说实话,不太应该提这样的问题。
1
gfreezy 2020-08-01 22:50:37 +08:00
应该看下 avro 具体怎么序列化的,感觉是类似 varint 的编码方式
|
2
JasonLaw OP @gfreezy 我好像明白了。sign 代表是不是还要考虑接下来的字节。union branch 1 (long, not null)代表类型是 long,因为 branch 0 是 null,所以 long 是 branch 1 。但是我不太确定自己的理解是否正确。明天再仔细看看。
|
3
ky11223344 2020-08-02 00:20:03 +08:00
sign 就是这个数是正数还是负数,这里是 0 就是指这个数是正数,每个 byte 第一个 bit 是 1 表示还有后续 byte,即这个数还要更多 byte 才能表示完整,0 表示没有后续,是最后一个 byte 了,我记得书上这个位置附近有相关解释是这样讲的,至于 union branch 我也不知道。
|