Apache Avro簡介

1240

簡介

Apache Avro是一個數據序列化方法。

Avro提供:

  • 豐富的數據結構。
  • 緊湊、高效的二進制數據格式。
  • 容器文件,用於存儲持久數據。
  • 遠程過程調用(RPC)。
  • 易於集成到動態語言的特性。
  • 無論是讀寫數據文件,還是使用或實現RPC協議,都無需代碼生成。代碼生成是一個優化選項且只對靜態類型語言的實現有意義。

Schema

Avro依賴於schema。當讀取Avro數據時,總是能夠獲取到寫入該數據時用到的schema。這樣一來,每次寫入數據都無需多餘的開銷,進而加快序列化速度、減小序列的大小。在動態的、腳本式語言中使用Avro也會變得更加容易,因爲數據配合它的schema可以進行完整的自我描述。

當Avro數據被存入一個文件時,它的schema也會隨之存入。隨後,文件可以被任何程序處理。如果讀取數據的程序期望另一個schema,這也容易解決,因爲兩個schema同時可以獲取到。

當把Avro用於RPC時,客戶端和服務器在連接握手時互換schema。(這一點還可以優化,對於大部分調用而言,實際上不會傳輸schema)。客戶端和服務器都擁有對方的全部的schema,因此,在通信中的命名域、缺失域、附加域等都可以很容易被處理。

Avro schema是使用JSON定義的。在已經存在JSON庫的語言中實現起來會更加方便。

同類比較

Thrift、Protocol Buffers等也提供了和Avro類似的功能。Avro區別於它們的主要方面如下:

  • 動態類型:Avro不要求代碼生成。數據總是和schema一起,無需代碼生成和靜態數據類型等就可以完整解析。這有助於在多種語言中構建通用的數據處理方法。
  • 無標記數據:由於讀取數據時總可以獲取到schema,因此,極少的類型信息會被編碼到數據中。這樣使得序列化之後的大小更小。
  • 無手動分配的域標識:當一個schema發生變化,處理數據時新的和舊的schema都可以獲取到。所以,二者的差異使用域名即可解決。

參考鏈接

原始英文鏈接:http://avro.apache.org/docs/1.8.1/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章