设计数据密集型应用程序 - 编码与演化

设计数据密集型应用程序 - 编码与演化

笔记来自于 《Designing Data-Intensive Applications》 的第四章

JSON 的二进制编码

{
	"userName": "Martin",
	"favoriteNumber": 1337,
	"interests": ["daydreaming", "hacking"]
}

MessagePack, a binary encoding for JSON.

第一个字节 0x83 表示接下来将会是一个对象,第二个字节 0xa8,表示接下来是一个字符串。

Thrift 和 Protocol Buffers

Protocol Buffers 是由 Google 开发的,Thrift 是有 Facebook 开发的,二者均需要使用一个 schema 来帮助编码。在 Thrift 世界中,对上述 JSON 的编码,需要首先使用 Thrift IDL 来描述 schema:

struct Person {
	1: required string userName,
	2: optional i64 favoriteNumber,
	3: optional list<string> interests
}

Protocol Buffers 中定义的 schema 如下所示:

message Person {
	required string user_name = 1;
	optional int64 favorite_number = 2;
	repeated string interests = 3; 
}

Thrift 有两种不同的二进制编码格式: BinaryProtocol 和 CompactProtocol,我们首先来看一下 BinaryProtocol: