《數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì)》讀書筆記①:數(shù)據(jù)序列化及常用序列化協(xié)議

首先還是安利時(shí)間:寫文時(shí)的歌單是
君に最後の口づけを
IxU
時(shí)間煮雨
我好想你
花に亡霊
あの夢(mèng)をなぞって
たふ?ん
群青

1.數(shù)據(jù)序列化的意義及必要性

??在開(kāi)發(fā)中時(shí)長(zhǎng)會(huì)遇到需要進(jìn)行跨進(jìn)程進(jìn)行數(shù)據(jù)傳輸灭袁,或者將數(shù)據(jù)持久化存儲(chǔ)到磁盤或別的什么介質(zhì)中,而數(shù)據(jù)在傳輸或存儲(chǔ)前需要進(jìn)行序列化的過(guò)程。
??那么派敷,為什么需要這個(gè)序列化的過(guò)程呢撰筷?它的意義是什么呢津畸?
??有些小伙伴可能會(huì)不理解绣张,為什么不能直接把數(shù)據(jù)在內(nèi)存中拿出來(lái)直接拿去進(jìn)行傳輸或者存儲(chǔ)呢惕蹄?
??雖然數(shù)據(jù)都是存在于內(nèi)存中這一點(diǎn)是沒(méi)有問(wèn)題的狂秦,但對(duì)于使用了不同編程語(yǔ)言而開(kāi)發(fā)出來(lái)的程序來(lái)說(shuō)灌侣,它們會(huì)在底層為了高效利用內(nèi)存與CPU而進(jìn)行不同的優(yōu)化,通常來(lái)說(shuō)它們都是指針變種或者升級(jí)版裂问,所以對(duì)于一個(gè)對(duì)象來(lái)說(shuō)侧啼,它對(duì)用戶所表現(xiàn)出來(lái)的外觀與它在內(nèi)存中的里相是不一樣的牛柒,舉例來(lái)說(shuō),假如說(shuō)有一個(gè)Object A痊乾,
它表現(xiàn)出來(lái)的外觀是這樣的:
{
??int a = 10;
??long b = 9527;
??String s = "鈴木愛(ài)理是我老婆";
??char[] carr = [新,垣,結(jié),衣,也,是,我,老,婆];
??Object B:{
????int innerA = 10086;
????long innerB = 1020;
??}
}
但實(shí)際上它在內(nèi)存里是這樣的:
{
??int a = 10;(基礎(chǔ)數(shù)據(jù)類型是被直接包著的)
??long b = 9527;
??String b -> 2134565(指向字符串對(duì)象地址的指針皮壁,數(shù)字是我亂寫的)
??int[] b -> 689461(指向int數(shù)組第0個(gè)元素所在地址的指針)
??Object B -> 98463165(指向ObjectB這個(gè)對(duì)象的指針)
}
所以如果你未經(jīng)任何處理,直接將ObjectA從內(nèi)存中復(fù)制出來(lái)哪审,那么對(duì)方最終可能只能接收到一堆無(wú)法識(shí)別的奇葩數(shù)字蛾魄。

??所以大概可以將序列化的過(guò)程簡(jiǎn)單地理解為【將不同編程語(yǔ)言為了優(yōu)化而魔改后的內(nèi)存中的數(shù)據(jù),轉(zhuǎn)換為可通過(guò)某種方法完整還原會(huì)內(nèi)存中的湿滓,用于跨進(jìn)程傳輸或持久化存儲(chǔ)的數(shù)據(jù)格式】滴须,而這種序列化的方法必須是在某種意義上通用的,與編程語(yǔ)言無(wú)關(guān)的叽奥。

2.常用的序列化格式

①目前互聯(lián)網(wǎng)比較流行的XML與JSON

??比較老資格的有XML扔水,以前在銀行里的時(shí)候也是經(jīng)常與XML報(bào)文打交道。
??JSON是最近幾年開(kāi)始流行起來(lái)的朝氓,似乎是因?yàn)榇蠹蚁訔塜ML冗余體積比較多魔市,浪費(fèi)了太多網(wǎng)絡(luò)帶寬,于是乎JSON出來(lái)了膀篮,體積更小嘹狞。
??這兩種格式都是具有很不錯(cuò)的可讀性的,受過(guò)訓(xùn)練的人類(指程序猿)也能輕易肉眼讀取誓竿,并且兼容性也不錯(cuò)磅网,因?yàn)榇蟛糠諮SON和XML的序列化工具都是根據(jù)報(bào)文中的變量名進(jìn)行1對(duì)1識(shí)別,因此除非是因?yàn)闃I(yè)務(wù)大規(guī)模變更而導(dǎo)致必填項(xiàng)發(fā)生變化筷屡,不然單純對(duì)于實(shí)體轉(zhuǎn)換來(lái)說(shuō)具有很好的向前/向后的兼容性涧偷。

??但是使用它們也有需要注意的問(wèn)題:
??數(shù)字編碼模糊。由于這兩種序列化格式中僅有變量名作為標(biāo)識(shí)毙死,因此如果發(fā)送方與接收方所定義的實(shí)體/數(shù)據(jù)結(jié)構(gòu)中的數(shù)字類型不一致——比如說(shuō)同為變量a燎潮,發(fā)送方是double,接收方是int扼倘,或者字符串确封,或者說(shuō)是所指定的精度不一致的double——這種情況中接收方反序列化時(shí)會(huì)產(chǎn)生問(wèn)題

②二進(jìn)制變種而來(lái)的序列化方式

??有部分開(kāi)發(fā)者可能是為了獲得更高的傳輸效率,節(jié)省帶寬再菊,而會(huì)選擇更緊湊或更快的解析格式爪喘。但這些方式一般偏小眾,難以在市場(chǎng)上普及纠拔,因此僅作為組織內(nèi)小范圍應(yīng)用秉剑。

目前比較有名的二進(jìn)制方式有facebook開(kāi)源的apache thrift和google開(kāi)源的protocol buffers,以及apache avro稠诲。其中apache avro的壓縮率是最高的侦鹏。這兩種方式應(yīng)用起來(lái)相對(duì)更復(fù)雜點(diǎn)(因?yàn)樾枰渲脤?shí)體信息等各種)

3.模式演化與兼容

??由于市場(chǎng)的發(fā)展與業(yè)務(wù)的變化诡曙,所以數(shù)據(jù)模式總是在發(fā)生變化,而對(duì)于開(kāi)發(fā)者來(lái)說(shuō)可能不是每一次都會(huì)兼顧去把所有的老程序進(jìn)行升級(jí)略水,因此考慮向前/向后兼容是有必要的价卤。
??對(duì)于序列化工具指導(dǎo)兼容性實(shí)現(xiàn)的方式有reader模式,writer模式聚请,數(shù)據(jù)流模式(好像對(duì)我來(lái)說(shuō)沒(méi)什么卵用荠雕,隨便記下來(lái)算了)。

神驅(qū)一夢(mèng)
2020.11.15

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驶赏,一起剝皮案震驚了整個(gè)濱河市炸卑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌煤傍,老刑警劉巖盖文,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚯姆,居然都是意外死亡五续,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門龄恋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疙驾,“玉大人,你說(shuō)我怎么就攤上這事郭毕∷椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵显押,是天一觀的道長(zhǎng)扳肛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)乘碑,這世上最難降的妖魔是什么挖息? 我笑而不...
    開(kāi)封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮兽肤,結(jié)果婚禮上套腹,老公的妹妹穿的比我還像新娘。我一直安慰自己资铡,他們只是感情好沉迹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著害驹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛤育。 梳的紋絲不亂的頭發(fā)上宛官,一...
    開(kāi)封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天葫松,我揣著相機(jī)與錄音,去河邊找鬼底洗。 笑死腋么,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亥揖。 我是一名探鬼主播珊擂,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼费变!你這毒婦竟也來(lái)了摧扇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挚歧,失蹤者是張志新(化名)和其女友劉穎扛稽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體滑负,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡在张,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矮慕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帮匾。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖痴鳄,靈堂內(nèi)的尸體忽然破棺而出瘟斜,到底是詐尸還是另有隱情,我是刑警寧澤夏跷,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布哼转,位于F島的核電站,受9級(jí)特大地震影響槽华,放射性物質(zhì)發(fā)生泄漏壹蔓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一猫态、第九天 我趴在偏房一處隱蔽的房頂上張望佣蓉。 院中可真熱鬧,春花似錦亲雪、人聲如沸勇凭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)虾标。三九已至,卻和暖如春灌砖,著一層夾襖步出監(jiān)牢的瞬間璧函,已是汗流浹背傀蚌。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蘸吓,地道東北人善炫。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像库继,于是被迫代替她去往敵國(guó)和親箩艺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容