最近(2015年1月)微軟公開源Bond,他們的架構化數據工作框架。在很多方面它與Google的Protocol Buffers類似。微軟債券與谷歌協議緩衝區之間的差異
這兩者之間最大的區別是什麼?有什麼優點和缺點,也就是說,我想在哪種情況下使用一種,但不使用另一種?當然,我並不是在談論諸如與其他項目或已經存在的API的一致性等明顯的事情,而是談論這兩個庫的特性。舉個例子,Bond有bonded<T>
,如果我沒有記錯的話,在Protocol Buffers中沒有對應的。
最近(2015年1月)微軟公開源Bond,他們的架構化數據工作框架。在很多方面它與Google的Protocol Buffers類似。微軟債券與谷歌協議緩衝區之間的差異
這兩者之間最大的區別是什麼?有什麼優點和缺點,也就是說,我想在哪種情況下使用一種,但不使用另一種?當然,我並不是在談論諸如與其他項目或已經存在的API的一致性等明顯的事情,而是談論這兩個庫的特性。舉個例子,Bond有bonded<T>
,如果我沒有記錯的話,在Protocol Buffers中沒有對應的。
一般來說,Bond具有更好的類型系統並支持多種協議。
特別是,優點是:
vector<T>
,map<T>
,list<T>
bonded<T>
)缺點:
fixed32
和fixed64
。oneof
在Protocol Buffers的)我做了一些測試,並出現在邦德簡單的消息是大小和ProtoBuf二進制格式大致相同。我使用Bond和C#ProtoBuf庫比較了序列化和反序列化時間:在我的例子中,Bond的表現更好一些,你可以找到我的source code on GitHub
總結一下,我認爲使用Bond更好些,當你使用一些複雜類型的數據或當您需要以不同格式表示相同數據時:例如作爲二進制文件存儲,但公開爲JSON等。
你有簡單的測試來證明這一點嗎? – mjsabby
@mjsabby,你想看到什麼?你可以在這裏我的代碼:https://github.com/takemyoxygen/bond-performance-tests – takemyoxygen
覆蓋[已經很好](http://microsoft.github.io/bond/why_bond.html)。 –
@HansPassant謝謝你指出(我不知道我怎麼會錯過那個頁面)。另一方面,我認爲從框架的創建者那裏聽到其他人也會很高興。 – dtldarek