2011-10-12 54 views
13

我看到Thrift和Protocol Buffers提到了很多,但我並不真正瞭解它們的用途。根據我的理解,當你想進行跨語言序列化時,也就是說,當你有一種語言的數據結構要發送到另一種使用另一種語言編寫的程序時,基本上可以使用它們。什麼是Apache Thrift和Google協議緩衝區用於?

這是正確的嗎?他們是否用於其他任何事情?

(從我再次認識有限,我認爲節儉和Protocol Buffers的主要有兩種不同版本的同一件事 - 隨時糾正我,或精心設計的。)

+2

它們是用於有效地對一組基本數據類型進行二進制編碼的「類型」消息格式(因爲它們使用了消息生成器,所以不需要顯式的自定義編碼器)。作爲交換或存儲(序列化)機制很有用。由於格式定義良好,因此可以跨語言(假定存在實現)共享,由使用相同語言的遠程進程共享,或用於單個進程內的序列化(或其他)。是的,他們正在爲同一個市場(以及Avro等)進行有效的戰鬥。 – 2011-10-12 21:31:22

+0

我認爲這些應該是聯繫在一起的:[Thrift vs協議緩衝區的最大差異?](http://stackoverflow.com/q/69316/320399) – blong

回答

18

他們系列化協議爲主。無論何時您需要在機器或進程之間傳輸數據,或者將其存儲在磁盤等中,都需要進行序列化。

XML/JSON /工作等OK,但他們有一定的管理費用,使他們不希望 - 除了有限的功能,它們都是比較大的,而且耗費計算在兩個方向上進行處理。尺寸可以通過壓縮來改善,但是這增加了處理成本。它們具有人類可讀的優點,但是:大多數數據不會被人讀取。

現在人們可能支出年齡手動編寫冗長,充滿錯誤的,最優化的,不可移植的格式不那麼冗長,或者他們可以使用經過嚴格測試的通用序列化格式被充分證明,跨平臺,便宜的流程,並由誰花費太多設計太太長時間擔心序列化,以友好 - 例如,版本寬容。理想情況下,它也允許一個平臺無關的描述層(可以認爲是「wsdl」或「mex」),它允許您輕鬆地向任何其他開發者說出「這裏是數據的樣子」(不知道他們使用了什麼工具/語言/平臺正在使用),並讓他們無痛地使用數據,而無需從頭開始編寫新的串行器/解串器。 。

這就是protobuf的節儉進來

在大多數情況下量明智,我真的希望兩端是在同一家公司相同的技術:簡單地說,他們需要得到的數據從A到B以最小的麻煩和開銷,或者他們需要將其存儲並稍後加載(例如,我們在redis blob中使用protobuf作爲二級緩存)。

+4

所以它們基本上像Json或XML,但是以二進制格式? – Gautam

+4

@GautamK本質上,是的。 –

+2

謝謝,這個答案真的解決了我很多疑問。 – Gautam