FlatBuffers - 簡介



在我們深入瞭解 FlatBuffers 之前,讓我們先簡要了解一下序列化,這是 FlatBuffers 所做的工作。

什麼是序列化和反序列化?

每當我們需要將物件狀態持久化到記憶體系統時,都需要序列化。在序列化中,我們將物件轉換為位元組,並將這些位元組儲存在記憶體系統中。這些儲存的位元組隨後可以反序列化以恢復物件狀態。由於我們將物件轉換為位元組,因此它可以儲存在任何地方,包括檔案系統、訊息佇列、資料庫等等,然後我們可以將這些位元組傳輸到不同的機器並檢索物件狀態。

為什麼我們需要序列化和反序列化?

序列化有助於持久化物件狀態,然後我們可以將其傳輸到網路上的任何位置。接收後,我們可以反序列化物件,或者換句話說,我們可以隨時在不同的機器上從位元組中恢復我們的物件。這是序列化和反序列化許多重要用例之一。另一個重要的用例是需要透過網路傳輸物件的情況。訊息佇列、資料庫物件、REST API 都基於此原理。在這種情況下,傳送方首先對物件進行序列化,然後將其傳輸到接收方。接收方然後反序列化已序列化的物件。

在 REST API、微服務架構中,應用程式通常被分解成小的服務,這些服務透過訊息佇列和 API 相互通訊。由於通訊是在網路上進行的,需要頻繁地將物件轉換為位元組,然後再轉換回物件。因此,序列化和反序列化在分散式環境中變得非常關鍵。

為什麼選擇 FlatBuffers?

Google FlatBuffers 執行將物件序列化和反序列化為位元組的操作,這些位元組可以傳輸到網路上。但是也有一些其他的庫和機制也可以傳輸資料。

那麼,是什麼讓 FlatBuffers 特別呢?以下是一些重要的特性:

  • 語言無關性 - FlatBuffers 編譯器可以為許多語言建立程式碼,例如 Java、Python、Go、C、C++ 等。因此,Java 物件可以由 Java 程式序列化為位元組,並可以反序列化為 Python 物件,反之亦然。

  • 高效的資料壓縮 - FlatBuffers API 最初是為遊戲環境和效能關鍵型系統開發的,其設計考慮了資料壓縮和效能。它非常節省記憶體,甚至比 Google Protocol Buffers(另一個 Google 序列化和反序列化庫)更快。

  • 向後和向前相容性 - FlatBuffers 架構同時具有向後和向前相容性。FlatBuffers 的模式支援在較新程式碼中新增更改,並允許棄用較舊的更改而不會破壞向後相容性。

  • 易於使用 - FlatBuffers 庫自動生成序列化程式碼(我們將在接下來的章節中看到),具有版本控制方案,以確保資料建立者和資料使用者可以具有序列化定義的不同版本等。

  • JSON 可轉換 FlatBuffers 模式檔案可以轉換為 JSON 檔案,同樣,我們可以使用 FlatBuffers 模式轉換 JSON 檔案。

FlatBuffers 與其他方法的比較 (XML/JSON/Java 序列化)

讓我們看看其他透過網路傳輸資料的方法與 FlatBuffers 相比如何。

特性 FlatBuffers JSON XML
語言無關性
序列化資料大小 三者中最少 小於 XML 三者中最大
人類可讀性 否,因為它使用單獨的編碼模式 是,因為它使用基於文字的格式 是,因為它使用基於文字的格式
序列化速度 三者中最快 比 XML 快 三者中最慢
資料型別支援 比其他兩者更豐富。支援複雜的資料型別,例如 Any、oneof 等。 支援基本資料型別 支援基本資料型別
對演變模式的支援
廣告
© . All rights reserved.