大資料 protobuf是啥玩意兒

2021-07-04 05:09:45 字數 1269 閱讀 6321

protobuf使用者結構化資料往hbase裡訪問只用。

首先,protobuf是乙個

開源專案(官方站點在「這裡」),而且是後台很硬的開源專案。網上現有的大部分(至少80%)開源專案,要麼是某人單幹、要麼是幾個閒雜人等合夥搞。而protobuf則不然,它是鼎鼎大名的google公司開發出來,並且在google內部久經考驗的乙個東東。由此可見,它的作者絕非一般閒雜人等可比。

那這個聽起來牛x的東東到底有啥用處捏?簡單地說,這個東東幹的事兒其實和

xml差不多,也就是把某種資料結構的資訊,以某種格式儲存起來。主要用於資料儲存、傳輸協議格式等場合。有同學可能心理犯嘀咕了:放著好好的xml不用,幹嘛重新發明輪子啊?!先別急,後面俺自然會有說道。

話說到了去年(大約是08年7月),google突然大發慈悲,把這個好東西貢獻給了開源社群。這下,像俺這種喜歡撿現成的傢伙可就有福啦!貌似喜歡撿現成的傢伙還蠻多滴,再加上google的號召力,開源後不到一年,protobuf的人氣就已經很旺了。所以俺為了與時俱進,就單獨開個帖子來忽悠一把。

★protobuf有啥特色?

掃盲完了之後,就該聊一下

技術方面的話題了。由於這玩意兒發布的時間較短(未滿周歲),所以俺接觸的時間也不長。今天在此是先學現賣,列位看官多多包涵:-)

◇效能好/效率高

現在,俺就來說說google公司為啥放著好端端的xml不用,非要另起爐灶,重新造輪子。乙個根本的原因是xml效能不夠好。

先說時間開銷:xml格式化(序列化)的開銷倒還好;但是xml解析(反序列化)的開銷就不敢恭維啦。俺之前經常碰到一些時間效能很敏感的場合,由於不堪忍受xml解析的速度,棄之如敝履。

再來看空間開銷:熟悉xml語法的同學應該知道,xml格式為了有較好的可讀性,引入了一些冗餘的文字資訊。所以空間開銷也不是太好(不過這點缺點,俺不常碰到)。

由於google公司賴以吹噓的就是它的海量資料和海量處理能力。對於幾十萬、上百萬機器的集群,動不動就是pb級的資料量,哪怕效能稍微提高0.1%也是相當可觀滴。所以google自然無法容忍xml在效能上的明顯缺點。再加上google從來就不缺造輪子的牛人,所以protobuf也就應運而生了。

google對於效能的偏執,那可是出了名的。所以,俺對於google搞出來protobuf是非常滴放心,效能上不敢說是最好,但肯定不會太差。 ◇

**生成機制

除了效能好,**生成機制是主要吸引俺的地方。為了說明這個**生成機制,俺舉個例子。

比如有個電子商務的系統(假設用c++實現),其中的模組a需要傳送大量的訂單資訊給模組b,通訊的方式使用socket。

假設訂單包括如下屬性:

iOS開發裡的Bundle是個啥玩意?!

初學ios開發的同學,不管是自己寫的,還是貼上的 或多或少都寫過下面的 nsbundle mainbundle pathforresource somefilename oftype yourfileextension yourviewcontroller initwithnibname yourv...

iOS開發裡的Bundle是個啥玩意?!

初學ios開發的同學,不管是自己寫的,還是貼上的 或多或少都寫過下面的 nsbundle mainbundle pathforresource somefilename oftype yourfileextension yourviewcontroller initwithnibname yourv...

iOS開發裡的Bundle是個啥玩意?!

初學ios開發的同學,不管是自己寫的,還是貼上的 或多或少都寫過下面的 nsbundle mainbundle pathforresource somefilename oftype yourfileextension yourviewcontroller initwithnibname yourv...