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