跳至主要內容

物件路徑 vs Arrow 路徑

TTOON 維護兩條獨立的處理路徑。了解何時該使用哪一條,是獲得最佳效能和開發者體驗的關鍵。

物件路徑

這是通用的路徑,用於在純文字和特定語言的原生物件之間進行轉換。

T-TOON/T-JSON 文字 ──parse──→ IR ──convert──→ Python dict / JS 物件 / Rust Node
Python dict / JS 物件 / Rust Node ──convert──→ IR ──serialize──→ T-TOON/T-JSON 文字

特性:

  • 適用於任何數據形狀 (物件、陣列、純量、巢狀結構)
  • 產生熟悉的語言原生型別 (dict, object, Node)
  • 以 IR (內部表示) 作為中間步驟
  • 適用於中小型數據集、設定檔和一般用途的資料交換

API:

語言解析 (Parse)序列化 T-TOON序列化 T-JSON
Pythonloads()dumps(obj)to_tjson(obj)
JSparse()stringify()toTjson()
Rustfrom_ttoon()to_ttoon()to_tjson()

Arrow 路徑

這是專為表格數據設計的高效能路徑,可直接讀寫 Apache Arrow 列式 (columnar) 格式。

T-TOON/T-JSON 文字 ──直接解析──→ Arrow 列式數據
Arrow 列式數據 ──直接序列化──→ T-TOON/T-JSON 文字

特性:

  • 僅適用於表格數據 (由具有純量欄位的統一物件組成的列表)
  • T-JSON 可以直接建立 Arrow Table / RecordBatch;T-TOON 表格目前仍使用相容路徑以進行轉換
  • 盡可能實現零複製 (zero-copy);記憶體分配降到最低
  • 保留原生 Arrow 型別 (Decimal128, Date32, FixedSizeBinary(16))
  • 對於大型資料集而言,速度顯著更快且記憶體效率更高

API:

語言解析 (Parse)序列化 T-TOON序列化 T-JSON
Pythonread_arrow()dumps(table/df)stringify_arrow_tjson()
JSreadArrow()stringifyArrow()stringifyArrowTjson()
Rustread_arrow()arrow_to_ttoon()arrow_to_tjson()

何時該用哪一個

情境路徑原因
設定檔物件任意巢狀結構,體積小
API 負載 (payloads)物件通用用途,任意形狀
資料庫表匯出Arrow表格格式,可能很大
Polars/Pandas 流水線Arrow已經是列式格式
串流處理大型資料集Arrow (串流)節省記憶體的逐行處理
跨語言物件交換物件熟悉的原生型別
分析流水線 (Analytics)Arrow原生 Arrow 生態系統

串流變體

這兩條路徑都有用於逐行處理的串流變體:

路徑串流讀取器串流寫入器
物件StreamReader / streamRead()StreamWriter / streamWriter()
ArrowArrowStreamReader / streamReadArrow()ArrowStreamWriter / streamWriterArrow()

另外還有每種格式的 T-JSON 變體 (例如 TjsonStreamReader, TjsonArrowStreamWriter 等等)。

詳細資訊請參閱 串流指南

設計理念

這兩條路徑刻意保持獨立,而不是強制所有數據通過單一的流水線。這是因為:

  1. 效能:Arrow 列式讀寫可避免逐行 IR 轉換的開銷
  2. 型別保真度:保留原生的 Arrow 型別 (Decimal128, FixedSizeBinary(16)) 而不會發生有損轉換
  3. 記憶體效率:大型數據集永遠不會具現化為特定語言的原生物件樹
  4. 可接受的程式碼重複:路徑之間少量的共用邏輯是為了效能而做出的有意取捨