怎樣給網(wǎng)站或者商品做推廣抖音seo軟件工具
目錄
基本介紹
原理
同類對比
為什么要使用protobuf?
基本介紹
protobuf的全稱是Protocol Buffer,是Google提供的一種數(shù)據(jù)序列化協(xié)議。Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式,可以用于結(jié)構(gòu)化數(shù)據(jù)序列化,很適合做數(shù)據(jù)存儲或 RPC 數(shù)據(jù)交換格式。它可用于通訊協(xié)議、數(shù)據(jù)存儲等領(lǐng)域的語言無關(guān)、平臺無關(guān)、可擴展的序列化結(jié)構(gòu)數(shù)據(jù)格式。 ?
結(jié)構(gòu)化數(shù)據(jù)是最為常見和熟悉的數(shù)據(jù)形態(tài),它由明確定義的信息組成,并以高度組織化的表格或數(shù)據(jù)庫進行存儲和管理。正如字面上表達的,就是帶有一定結(jié)構(gòu)的數(shù)據(jù)。比如電話簿上有很多記錄數(shù)據(jù),每條記錄包含姓名、ID、郵件、電話等,這種結(jié)構(gòu)重復(fù)出現(xiàn)。
目前Protobuf官方工程主頁上顯示的已支持的開發(fā)語言多達10種,分別有:C++、Java、Python、Objective-C、C#、JavaNano、JavaScript、Ruby、Go、PHP,基本上主流的語言都已支持?
?
- 2001年初,Protobuf首先在Google內(nèi)部創(chuàng)建, 我們把它稱之為?
proto1
,一直以來在Google的內(nèi)部使用,其中也不斷的演化,根據(jù)使用者的需求也添加很多新的功能,一些內(nèi)部庫依賴它。幾乎每個Google的開發(fā)者都會使用到它。 - Google開始開源它的內(nèi)部項目時,因為依賴的關(guān)系,所以他們決定首先把Protobuf開源出去。 proto1在演化的過程中有些混亂,所以Protobuf的開發(fā)者重寫了Protobuf的實現(xiàn),保留了proto1的大部分設(shè)計,以及proto1的很多的想法。但是開源的proto2不依賴任何的Google的庫,代碼也相當(dāng)?shù)那逦?008年7月7日,Protobuf開始公布出來。
- Protobuf公布出來也得到了大家的廣泛的關(guān)注, 逐步地也得到了大家的認可,很多項目也采用Protobuf進行消息的通訊,還有基于Protobuf的微服務(wù)框架GRPC。在使用的過程中,大家也提出了很多的意見和建議,Protobuf也在演化,于2016年推出了Proto3。 Proto3簡化了proto2的開發(fā),提高了開發(fā)的效能,但是也帶來了版本不兼容的問題。
原理
ProtoBuf 是通過ProtoBuf編譯器將與編程語言無關(guān)的特有的 .proto 后綴的數(shù)據(jù)結(jié)構(gòu)文件編譯成各個編程語言(Java,C/C++,Python)專用的類文件,然后通過Google提供的各個編程語言的支持庫lib即可調(diào)用API。
同類對比
XML、JSON 也可以用來存儲此類結(jié)構(gòu)化數(shù)據(jù),但是使用ProtoBuf表示的數(shù)據(jù)能更加高效,并且將數(shù)據(jù)壓縮得更小。
協(xié)議 | 場景 | 舉例 |
---|---|---|
xml | 主要在本地使用 | UI,游戲信息 |
json | http api | HTTP網(wǎng)頁注冊賬戶 |
protobuf | 服務(wù)與服務(wù)的遠程調(diào)用 | rpc,游戲,即時通訊,tars brpc |
用
protobuf
序列化后的大小是json
的10分之一,是xml
格式的20分之一,但是性能卻是它們的5~100倍,我覺得用戶一定會尖叫的:oh my god!
。?
如果有我們有一個 person 對象,用 JSON、XML 和 protobuf 表示下它們各是什么樣。
用 XML 格式表示如下
<person><name>ivy</name><age>24</age>
</person>
用 JSON 格式表示如下
{"name":"ivy","age":24
}
用 protobuf 表示如下, 它直接用二進制來表示數(shù)據(jù),不像上面 XML 和 JSON 格式那么直觀
[10 6 69 108 108 105 111 116 16 24]
三種格式優(yōu)點:
- json優(yōu)點就是較XML格式更加小巧,傳輸效率較xml提高了很多,可讀性還不錯。
- xml優(yōu)點就是可讀性強,解析方便。
- ?protobuf優(yōu)點就是傳輸效率快,序列化后體積相比Json和XML很小,支持跨平臺多語言,消息格式升級和兼容性還不錯,序列化反序列化速度很快。
三種格式缺點:
- json缺點就是傳輸效率也不是特別高(比xml快,但比protobuf要慢很多)。
- xml缺點就是效率不高,資源消耗過大。
- protobuf缺點就是使用不太方便。?
為什么要使用protobuf?
使用protobuf的原因肯定是為了解決開發(fā)中的一些問題,那使用其他的序列化機制會出現(xiàn)什么問題呢?
- (1)java默認序列化機制:效率極低,而且還能不能跨語言之間共享數(shù)據(jù)。
- (2)XML常用于與其他項目之間數(shù)據(jù)傳輸或者是共享數(shù)據(jù),但是編碼和解碼會造成很大的性能損失。
- (3)json格式也是常見的一種,但是在json在解析的時候非常耗時,而且json結(jié)構(gòu)非常占內(nèi)存。
但是我們protobuf是一種靈活的、高效的、自動化的序列化機制,可以有效的解決上面的問題。