OpenHarmony啃論文成長計劃---序列化技術發(fā)展及應用綜述
【本期看點】
- 除JSON/XML之外的序列化技術的誕生。
- 歷年來序列化技術的發(fā)展時間線。
- 一圖概覽不同序列化技術的應用場景。
- 一圖比較不同序列化技術位字符串包含的信息量大小。
除JSON/XML之外的序列化技術的誕生
JSON/XML的不足
我們都知道JSON/XML擁有非常強大表達力和跨平臺能力的序列化技術,使用起來非常地方便,且沒什么約束。不過隨著各個平臺數據量的飆升,方便且自由的JSON/XML序列化技術也展現(xiàn)出了非常多性能方面的不足,而這些問題恰巧是不能忽視的。
JSON和XML屬于文本序列化規(guī)范,都是使用字符串表示所有的數據,但是像浮點數,布爾值,結構體等一些非字符類型的數據,為了解析出這些非字符類型的數據,在序列化過程中的是會對數據類型進行描述的,最后生成的字面量表達會占用很多額外的存儲空間。
在面對龐大的數據處理的時候,在這種序列化規(guī)范下,系統(tǒng)甚至有可能會overflow。
序列化技術蓬勃發(fā)展
就在剛剛說的那些序列化瓶頸下,程序員們怎么會妥協(xié)于此呢,就在JSON之后,越來越多的序列化技術出現(xiàn)在我們視野內。比如上一期談到的幾乎沒有解析時間的Flatbuffers,還有分布式計算經常用到的Microsoft Bond,Cap‘s Proto等等。
歷年來序列化技術的發(fā)展時間線
可以看到21世紀開始,因為世界在不斷地網絡信息化,其中對數據傳輸過程地要求也越來越高,序列化技術也在被人們不斷迭代創(chuàng)新。
序列化技術也被從簡單地字符分割值CSV文件,再到1996年,在SGML的基礎之上,簡化出一種規(guī)范,提出了一種標記型語言命名為XML(可擴展標記語言)。2006年現(xiàn)在依舊廣受人們喜愛地JSON也出現(xiàn)在了我們的視野,隨著技術的創(chuàng)新與發(fā)展,序列化技術也因為不同的場景需求,在近15年間,許多新序列化技術在不斷地涌現(xiàn)出來。
一圖概覽不同序列化技術的應用場景
在上面這幅圖我們可以直觀地看到不同序列化技術地應用場景,可能這些技術還可以被應用于其他場景,但是相對于其他序列化技術,它們更多地被應用于特定地場景中。從80年代電子表格的出現(xiàn),CSV被人們所熟知,再到同時期應用于遠程通信的ASN.1。再緊接著的就是象征著網絡時代正式開始的web應用,從1996年采用XML,再到2006年開始JSON盛行,一直沿用至今。
在軟體架構中,使用著YAML還有TOML。近些年大火地大數據在使用Apache Avro;數據庫技術也引入了序列化技術BSON;未來大勢所趨地物聯(lián)網使用著CBOR;再到我們現(xiàn)在的瘋狂的網絡游戲,應用著FlatBuffers ,后面更是基于FlatBuffers創(chuàng)新除了兼容性更佳的FlexBUffers。當然也離不開鬧得沸沸揚揚的分布式計算,用于這個場景的序列化技術也是不斷地再迭代,先后有Protocol Buffers,Apache Thrift,Message Pack,Cap'n Proto以及Microsoft Bond。
一圖比較不同序列化技術位字符串包含的信息量大小
上圖中表示的是用不同的序列化技術,分別序列化相同數據后,對位字符串信息量大小進行排序。(越往右信息量越小)。
我們可以根據上圖直觀地看到序列化后的位字符串包含的信息量,來比較無模式和模式驅動的序列化規(guī)范。
最左邊的處理方法序列化后的位字符串的信息量是最大的,都是無模式序列化規(guī)范(Schema-less Serialization Specififications),比如BSON,Smile,FlexBuffers等,因為最大地保留了原始數據及其結構的信息描述。最右邊的信息量是最小的,比如ASN.1,因為他們把非常多的結構信息已經在規(guī)范中提前約定,因此不需要寫入序列化后的位字符串中。