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