F3: 下一代開源數據文件格式

F3: 下一代開源數據文件格式

F3 是一個研究原型,旨在開發下一代開源列式數據文件格式,以解決 Apache Parquet 和 ORC 等傳統格式的僵化問題。其主要創新在於使用嵌入式 WebAssembly (Wasm) 解碼器,這使得文件即使在原生解碼器不可用或引入新的編碼方案時,仍能保持自我描述性與可讀性。

使用嵌入式 Wasm 解碼器解決格式僵化問題

F3 透過將解碼數據所需的邏輯直接嵌入文件本身,來確保長期的互操作性與擴展性。傳統格式依賴外部 SDK 或函式庫來實現特定的編碼方案,而 F3 則包含 Wasm 二進位檔,作為備用解碼器。

這種方法提供了幾項技術優勢:

  • 前向相容性: 開發人員可以在不等待文件格式規範的全球更新或新 SDK 的廣泛採用之前,實現新的編碼方案。
  • 平台無關性: 由於 Wasm 是一種可移植的二進位指令格式,嵌入式解碼器可以在任何具有 Wasm 執行環境的平台上運行。
  • 極小開銷: 專案文件指出,嵌入這些解碼器僅需額外的幾 KB 儲存空間。

與傳統列式格式的比較

F3 被定位為 Parquet 等「上一代」格式的繼承者。該專案旨在糾正這些舊格式中固有的佈局缺陷,因為這些格式是為已經演進的硬體與工作負載環境而設計的。

透過提供一個通用 API 來添加新的編碼方案,F3 旨在消除每次數據處理或計算範式轉移時都需要創建全新文件格式的需求。該格式的結構使用 FlatBuffers 定義,這提供了一種高效訪問序列化數據的方式。

技術實現與研究狀態

F3 目前是一個與 SIGMOD 2026 論文相關的研究原型。它並非設計用於生產環境。目前的實現是用 Rust 撰寫的,並包含幾個關鍵組件:

  • fff-poc:主要的概念驗證代碼。
  • fff-ude-wasm:透過 Wasm 實現的使用者定義編碼 (User-Defined-Encoding, UDE)。
  • fff-bench:用於驗證儲存佈局有效性的基準測試與實驗套件。

社群評論與技術權衡

雖然嵌入式解碼器的概念被一些人視為解決 SDK 依賴問題的「天才」方案,但其他技術觀察家對安全性與長期可行性提出了重大疑慮:

安全性與攻擊面

批評者認為,在數據格式中引入主動執行層(虛擬機)會顯著增加攻擊面。具體而言,存在以下疑慮:

  • 遠端代碼執行 (RCE): 從文件內部執行 Wasm 二進位檔的能力可能會被用於惡意用途。
  • 資源耗盡: 惡意構造的 Wasm 解碼器可能被用於透過資源耗盡來發動拒絕服務攻擊 (DoS)。

長期存檔疑慮

對於冷存儲與長期存檔(例如 10 年以上),有些人認為「簡單直接、文件詳盡的位元組規範」比二進位解碼器更理想。依賴 Wasm 解釋器會導致在遙遠的未來,對 Wasm 執行環境持續可用性與性能的依賴。

功能限制

一些觀察家指出,解碼器僅解決了轉換位元流的問題;它並未解決解碼後的數據如何被使用的更高層級問題。有人對 F3 是否支持關鍵性能特性,例如高效的 mmap 或在不執行嵌入式 Wasm blob 的情況下進行部分尋址 (partial seeking),提出了疑慮。

"嵌入每個文件中的解碼器需要極小的儲存空間(KB 級別)並確保在原生解碼器不可用時在任何平台上都能保持相容性。"

"將解碼邏輯放入 WASM 二進位檔中,會將一個本應是冷存儲的文件引入了一個主動執行層。"

Sources