From 13dffa1c085af199b3a714e932a719104ef80ff9 Mon Sep 17 00:00:00 2001 From: vdong Date: Mon, 4 Sep 2023 11:54:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E7=AC=AC=E5=9B=9B?= =?UTF-8?q?=E7=AB=A0=20Field=20tags=20and=20schema=20evolution=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E5=AD=97=E6=AE=B5=E7=BF=BB=E8=AF=91=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原文是 :Removing a field is just like adding a field, with backward and forward compatibility concerns reversed. --- ch4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch4.md b/ch4.md index ce0f335..d493b21 100644 --- a/ch4.md +++ b/ch4.md @@ -177,7 +177,7 @@ Thrift CompactProtocol 编码在语义上等同于 BinaryProtocol,但是如 [ 向后兼容性呢?只要每个字段都有一个唯一的标签号码,新的代码总是可以读取旧的数据,因为标签号码仍然具有相同的含义。唯一的细节是,如果你添加一个新的字段,你不能设置为必需。如果你要添加一个字段并将其设置为必需,那么如果新代码读取旧代码写入的数据,则该检查将失败,因为旧代码不会写入你添加的新字段。因此,为了保持向后兼容性,在模式的初始部署之后 **添加的每个字段必须是可选的或具有默认值**。 -删除一个字段就像添加一个字段,只是这回要考虑的是向前兼容性。这意味着你只能删除可选的字段(必需字段永远不能删除),而且你不能再次使用相同的标签号码(因为你可能仍然有数据写在包含旧标签号码的地方,而该字段必须被新代码忽略)。 +删除一个字段就像添加一个字段,只是向后和向前兼容性的关注点被颠倒了。这意味着你只能删除可选的字段(必需字段永远不能删除),而且你不能再次使用相同的标签号码(因为你可能仍然有数据写在包含旧标签号码的地方,而该字段必须被新代码忽略)。 #### 数据类型和模式演变