ch4 update

This commit is contained in:
Vonng 2020-11-05 19:40:59 +08:00
parent b6f5819ef7
commit 1bf5a38bdc
2 changed files with 21 additions and 15 deletions

View File

@ -73,7 +73,7 @@
## 法律声明
从原作者处得知已经有简体中文的翻译计划将于2018年末完成。
从原作者处得知已经有简体中文的翻译计划将于2018年末完成。[购买地址](https://search.jd.com/Search?keyword=设计数据密集型应用)
译者纯粹出于**学习目的**与**个人兴趣**翻译本书,不追求任何经济利益。
@ -88,13 +88,18 @@
1. [序言初翻修正](https://github.com/Vonng/ddia/commit/afb5edab55c62ed23474149f229677e3b42dfc2c) by [@seagullbird](https://github.com/Vonng/ddia/commits?author=seagullbird)
2. [第一章语法标点校正](https://github.com/Vonng/ddia/commit/973b12cd8f8fcdf4852f1eb1649ddd9d187e3644) by [@nevertiree](https://github.com/Vonng/ddia/commits?author=nevertiree)
3. [第六章部分校正](https://github.com/Vonng/ddia/commit/d4eb0852c0ec1e93c8aacc496c80b915bb1e6d48) 与[第10章的初翻](https://github.com/Vonng/ddia/commit/9de8dbd1bfe6fbb03b3bf6c1a1aa2291aed2490e) by @[MuAlex](https://github.com/Vonng/ddia/commits?author=MuAlex)
4. 第一部分前言ch2校正 by @jiajiadebug
5. 词汇表、后记关于野猪的部分 by @[Chowss](https://github.com/Vonng/ddia/commits?author=Chowss)
6. 感謝[@afunTW](https://github.com/afunTW)提供繁體中文的版本
4. [第一部分](part-i.md)前言,[ch2](ch2.md)校正 by @jiajiadebug
5. [词汇表](glossary.md)、[后记]()关于野猪的部分 by @[Chowss](https://github.com/Vonng/ddia/commits?author=Chowss)
6. [@afunTW](https://github.com/afunTW)贡献的[繁體中文](https://github.com/Vonng/ddia/pulls)版本
7. 感谢所有作出贡献,提出意见的朋友们,限于篇幅不一一列出,参见:
* [Issues](https://github.com/Vonng/ddia/issues)
* [Pull Requests](https://github.com/Vonng/ddia/pulls)
https://github.com/Vonng/ddia/pulls)
感谢所有作出贡献,提出意见的朋友们:[Issues](https://github.com/Vonng/ddia/issues)[Pull Requests](https://github.com/Vonng/ddia/pulls)
## Known Bugs
* 第二章至第四章未进行系统的精翻,因此留有不少机翻痕迹,望读者见谅。

19
ch4.md
View File

@ -72,22 +72,23 @@
### JSONXML和二进制变体
谈到可以被许多编程语言编写和读取的标准化编码JSON和XML是显眼的竞争者。它们广为人知广受支持也“广受憎恶”。 XML经常被批评为过于冗长和不必要的复杂【9】。 JSON倍受欢迎主要由于它在Web浏览器中的内置支持通过成为JavaScript的一个子集以及相对于XML的简单性。 CSV是另一种流行的与语言无关的格式尽管功能较弱。
当我们谈到可以被多种编程语言读写的标准编码时JSON和XML是最显眼的角逐者。它们广为人知广受支持也“广受憎恶”。 XML经常收到批评过于冗长与且过份复杂【9】。 JSON的流行则主要源于通过成为JavaScript的一个子集Web浏览器的内置支持以及相对于XML的简单性。 CSV是另一种流行的与语言无关的格式尽管功能相对较弱。
JSONXML和CSV是文本格式,因此具有人类可读性(尽管语法是一个热门辩题)。除了表面的语法问题之外,它们也有一些微妙的问题:
JSONXML和CSV属于文本格式,因此具有人类可读性(尽管它们的语法是一个热门争议话题)。除了表面的语法问题之外,它们也存在一些微妙的问题:
* 数字的编码多有歧义之处。XML和CSV不能区分数字和字符串除非引用外部模式。 JSON虽然区分字符串和数字但不区分整数和浮点数而且不能指定精度。
* 当处理大量数据时,这个问题更严重了。例如,大于$2^{53}$的整数不能在IEEE 754双精度浮点数中精确表示因此在使用浮点数例如JavaScript的语言进行分析时这些数字会变得不准确。 Twitter上有一个大于$2^{53}$的数字的例子它使用一个64位的数字来标识每条推文。 Twitter API返回的JSON包含了两种推特ID一个JSON数字另一个是十进制字符串以此避免JavaScript程序无法正确解析数字的问题【10】。
* JSON和XML对Unicode字符串即人类可读的文本有很好的支持但是它们不支持二进制数据不带字符编码(character encoding)的字节序列。二进制串是很实用的功能所以人们通过使用Base64将二进制数据编码为文本来绕开这个限制。模式然后用于表示该值应该被解释为Base64编码。这个工作但它有点hacky并增加了33的数据大小。 XML 【11】和JSON 【12】都有可选的模式支持。这些模式语言相当强大所以学习和实现起来相当复杂。 XML模式的使用相当普遍但许多基于JSON的工具嫌麻烦才不会使用模式。由于数据的正确解释例如数字和二进制字符串取决于模式中的信息因此不使用XML/JSON模式的应用程序可能需要对相应的编码/解码逻辑进行硬编码。
* CSV没有任何模式因此应用程序需要定义每行和每列的含义。如果应用程序更改添加新的行或列则必须手动处理该变更。 CSV也是一个相当模糊的格式如果一个值包含逗号或换行符会发生什么。尽管其转义规则已经被正式指定【13】但并不是所有的解析器都正确的实现了标准。
* **数值numbers** 的编码多有歧义之处。XML和CSV不能区分数字和字符串除非引用一个外部模式。 JSON虽然区分字符串与数值但不区分整数和浮点数而且不能指定精度。
* 当处理更大的数值时,这个问题显得尤为严重。例如大于$2^{53}$的整数无法使用IEEE 754双精度浮点数精确表示因此在使用浮点数例如JavaScript的语言进行分析时这些数字会变得不准确。 Twitter有一个关于大于$2^{53}$的数字的例子它使用64位整数来标识每条推文。 Twitter API返回的JSON包含了两种推特ID一种是JSON数值另一种是十进制字符串以避免JavaScript程序无法正确解析数字的问题【10】。
* JSON和XML对Unicode字符串即人类可读的文本有很好的支持但是它们不支持二进制数据即不带 **字符编码(character encoding)** 的字节序列。二进制串是很有用的功能人们通过使用Base64将二进制数据编码为文本来绕过此限制。其特有的模式通常标识着这个值应当被解释为Base64编码的二进制数据。这种方案虽然管用但比较Hacky并且会增加三分之一的数据大小。
* XML 【11】和 JSON 【12】都有可选的模式支持。这些模式语言相当强大所以学习和实现起来都相当复杂。 XML模式的使用相当普遍但许多基于JSON的工具才不会去折腾模式。对数据的正确解读例如区分数值与二进制串取决于模式中的信息因此不使用XML/JSON模式的应用程序可能需要对相应的编码/解码逻辑进行硬编码。
* CSV没有任何模式因此每行和每列的含义完全由应用程序自行定义。如果应用程序变更添加了新的行或列那么这种变更必须通过手工处理。 CSV也是一个相当模糊的格式如果一个值包含逗号或换行符会发生什么。尽管其转义规则已经被正式指定【13】但并不是所有的解析器都正确的实现了标准。
尽管存在这些缺陷但JSONXML和CSV已经足够用于很多目的。特别是作为数据交换格式(即将数据从一个组织发送到另一个组织),它们很可能仍然很受欢迎。这种情况下,只要人们对格式是什么意见一致,格式多么美观或者高效就没有关系。**让不同的组织达成一致的难度超过了其他大多数问题。**
尽管存在这些缺陷但JSONXML和CSV对很多需求来说已经足够好了。它们很可能会继续流行下去,特别是作为数据交换格式来说(即将数据从一个组织发送到另一个组织)。这种情况下,只要人们对格式是什么意见一致,格式有多美观或者效率有多高效就无所谓了。让不同的组织就这些东西达成一致的难度超过了绝大多数问题。
#### 二进制编码
对于仅在组织内部使用的数据,使用最小公分母编码格式的压力较小。例如,可以选择更紧凑或更快的解析格式。虽然对小数据集来说,收益可以忽略不计但一旦达到TB级别数据格式的选择就会产生巨大的影响。
对于仅在组织内部使用的数据,使用最小公约数式的编码格式压力较小。例如,可以选择更紧凑或更快的解析格式。虽然对小数据集来说,收益可以忽略不计但一旦达到TB级别数据格式的选型就会产生巨大的影响。
JSON比XML简洁但与二进制格式一比,还是太占地方。这一事实导致大量二进制编码版本JSON & XML的出现JSONMessagePackBSONBJSONUBJSONBISON和Smile等例如WBXML和Fast Infoset。这些格式已经被各种各样的领域所采用但是没有一个像JSON和XML的文本版本那样被广泛采用。
JSON比XML简洁但与二进制格式相比还是太占空间。这一事实导致大量二进制编码版本JSON & XML的出现JSONMessagePackBSONBJSONUBJSONBISON和Smile等例如WBXML和Fast Infoset。这些格式已经在各种各样的领域中采用但是没有一个能像文本版JSON和XML那样被广泛采用。
这些格式中的一些扩展了一组数据类型例如区分整数和浮点数或者增加对二进制字符串的支持另一方面它们没有盖面JSON / XML的数据模型。特别是由于它们没有规定模式所以它们需要在编码数据中包含所有的对象字段名称。也就是说在[例4-1]()中的JSON文档的二进制编码中需要在某处包含字符串`userName``favoriteNumber`和`interest`。