開源專案
facebookincubator/velox avatar
facebookincubator/velox

Velox:一個可組合的 C++ 執行引擎

用於資料管理系統的可組合且完全可擴展的 C++ 執行引擎庫。

4,210 個 Star1,607 個 ForkC++Apache-2.0

秒懂

它是什麼?
關於 Velox 執行引擎庫的概述,包括其元件、可擴充性和建置流程。
適合誰用?
適合需要評估 facebookincubator/velox 檔案所述能力的讀者,不適合把本文當成完整效能或安全測試報告。先依 README 的實際命令與檔案入口試跑,記下版本、輸入、輸出與錯誤,再決定是否納入正式流程。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫在最近一天內有新的提交。
用什麼語言寫的?
主要是 C++(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

一個可組合的 C++ 執行引擎

Velox 是一個以開源 C++ 函式庫形式分發的可組合執行引擎。它提供可重用、可擴充且高效的資料處理元件,可用於建置面向批次、互動式、串流處理以及 AI/ML 等分析工作負載的資料管理系統。Velox 由 Meta 建立,目前與 IBM/Ahana、Intel、Voltron Data、Microsoft、ByteDance 等多家公司合作開發。在常見的使用情境中,Velox 接收一個完全最佳化的查詢計劃作為輸入,並執行所描述的計算。它不提供 SQL 解析器、資料框架層或查詢最佳化器,因此通常不適合終端使用者直接使用;相反,它主要由整合和最佳化計算引擎的開發者使用。

以 facebookincubator/velox 為中心閱讀素材,可確認的範圍是 README、倉庫欄位與發布紀錄;未在這些內容出現的效能、相容性或安全承諾不應自行補上。這種界線讓文章能區分作者明說的能力與仍待本地確認的假設。 本段專看第 1 個核對面向:把 facebookincubator/velox 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

採用前可從 facebookincubator/velox 的 README 指定入口開始,並把輸入、輸出和錯誤訊息留下來。若檔案列出命令、設定檔或資料格式,應逐項對應;若檔案未說明某個環節,這就是本專案目前的未知,不宜用其他工具的經驗代替。 對 facebookincubator/velox 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookincubator/velox 的第 1 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把檔案敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

核心元件

Velox 提供一個通用型別系統,支援標量、複雜和巢狀型別,如結構、對映和陣列。其 Vector 模組是相容 Arrow 的列式記憶體佈局,支援 Flat、Dictionary、Constant 和 Sequence/RLE 等編碼,並具有惰性具體化模式和對亂序寫入的支援。表達式求值引擎完全向量化,可對 Vector/Arrow 編碼的資料高效執行。它包含遵循 Presto 和 Spark 語意的向量化標量、聚合和視窗函式集合。關係運算子涵蓋掃描、寫入、投影、過濾、分組、排序、shuffle/exchange、雜湊連接、合併連接和巢狀迴圈連接,以及 unnest 等。I/O 層定義了可擴充資料來源和資料接收器的連接器介面,支援 ORC/DWRF、Parquet 和 Nimble 格式,以及 S3、HDFS、GCS、ABFS 和本機檔案等儲存配接器。網路序列化器實作諸如 PrestoPage 和 Spark UnsafeRow 之類的線協定。資源管理原語處理記憶體區域、緩衝區管理、工作、驅動、執行緒集區、溢寫和快取。

實際核對時應把 main 分支與最近可見的發布標籤分開記錄。素材未提供發布標籤,因此版本差異需要回到倉庫提交紀錄。 文章只把這些資料當作時間點,不將 star 或 issue 數量當成品質證明。 本段專看第 2 個核對面向:把 facebookincubator/velox 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

維護者需要特別檢查 facebookincubator/velox 的依賴邊界與授權條件。素材標示的授權為 Apache-2.0;它只說明分發與修改時要閱讀的法律條件,不能代替第三方依賴盤點、組織政策審查或部署環境的風險評估。 對 facebookincubator/velox 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookincubator/velox 的第 2 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把檔案敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

可擴充性

Velox 是可擴充的,允許開發者定義引擎特定的特化。自訂型別、簡單和向量化函式、聚合函式、視窗函式、運算子、檔案格式、儲存配接器和網路序列化器都可以新增。不同元件 API 的擴充性和整合範例位於 velox/examples 目錄中。README 沒有詳細說明每個擴充點的確切 API,因此驗證這些介面需要檢視原始碼和檔案中連結的開發者指南。這種可擴充性正是使 Velox 成為函式庫而非固定系統的原因;它被設計為適應不同的計算引擎。

採用前可從 facebookincubator/velox 的 README 指定入口開始,並把輸入、輸出和錯誤訊息留下來。若檔案列出命令、設定檔或資料格式,應逐項對應;若檔案未說明某個環節,這就是本專案目前的未知,不宜用其他工具的經驗代替。 本段專看第 3 個核對面向:把 facebookincubator/velox 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

這篇文章的判斷落在 facebookincubator/velox 自身的工作流程:先用檔案中的最小入口得到可觀察結果,再以 README、版本標籤和原始碼中的實際路徑核對差異。測試若只停留在首頁、範例截圖或宣傳描述,無法證明你的輸入與部署方式也成立。 對 facebookincubator/velox 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookincubator/velox 的第 3 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把檔案敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

開始使用

README 描述了複製儲存庫並安裝依賴項的步驟。它提供了針對 macOS、Ubuntu 20.04 或更高版本以及 CentOS 9 Stream 的安裝指令碼。指令碼使用 DEPENDENCY_DIR 環境變數設定下載和建置位置,預設為目前工作目錄下的 deps-download;INSTALL_PREFIX 用於設定安裝位置。在 macOS 上,預設安裝位置是 deps-install,而在 Linux 上則預設為系統位置。支援的編譯器最低版本為 Linux 上的 GCC 11 或 Clang 15,macOS 上的 Clang 15。README 還列出了建議的版本和替代組合。對於 x86 CPU,最低要求是 SSE4.2,預設使用 AVX;對於 Arm,支援 Apple Silicon 和 Linux AArch64。具體命令在 README 中給出,此處不再重複。README 還指出,安裝指令碼可以安裝用於 S3、GCS 和 Azure Blob 檔案系統等配接器的額外函式庫。

維護者需要特別檢查 facebookincubator/velox 的依賴邊界與授權條件。素材標示的授權為 Apache-2.0;它只說明分發與修改時要閱讀的法律條件,不能代替第三方依賴盤點、組織政策審查或部署環境的風險評估。 本段專看第 4 個核對面向:把 facebookincubator/velox 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

當 facebookincubator/velox 進入團隊流程後,應把本次核對的版本、命令、設定和輸出連同失敗案例保存。素材沒有提供的部分標成未說明,等實際維護時由負責人補上證據;這比把推測寫成固定功能更能支撐後續升級決定。 對 facebookincubator/velox 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookincubator/velox 的第 4 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把檔案敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

建置和測試

在根目錄執行 make 可以編譯原始碼。對於開發,make debug 建置非最佳化的除錯版本,make release 建置最佳化版本。make unittest 建置並執行測試。Linux CI 上有四個測試套件使用分組二進位檔案以減少連結時間,其他套件使用單獨的二進位檔案。在 macOS 上,分組預設關閉,可以透過 CMake 旗標 -DVELOX_ENABLE_GROUPED_TESTS=OFF 在 Linux 上停用。對於不想安裝系統依賴項的使用者,提供了 docker-compose 檔案用於在容器中建置和執行測試,命令如 docker-compose build ubuntu-cpp 和 docker-compose run --rm ubuntu-cpp。可以使用 NUM_THREADS 環境變數覆寫建置時使用的執行緒數。Velox 的建置指標釋出在 README 中連結的網站上。

這篇文章的判斷落在 facebookincubator/velox 自身的工作流程:先用檔案中的最小入口得到可觀察結果,再以 README、版本標籤和原始碼中的實際路徑核對差異。測試若只停留在首頁、範例截圖或宣傳描述,無法證明你的輸入與部署方式也成立。 本段專看第 5 個核對面向:把 facebookincubator/velox 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

以 facebookincubator/velox 為中心閱讀素材,可確認的範圍是 README、倉庫欄位與發布紀錄;未在這些內容出現的效能、相容性或安全承諾不應自行補上。這種界線讓文章能區分作者明說的能力與仍待本地確認的假設。 對 facebookincubator/velox 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookincubator/velox 的第 5 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把檔案敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

社群和治理

Velox 是一個開源專案,由個人貢獻者和組織組成的社群支援。其技術治理機製在專案網站上的檔案中有所描述。維護者清單也釋出在同一網站上。主要的溝通管道是 Velox-OSS Slack 工作區,以及 GitHub issues 和 Discussions。存取 Slack 工作區需要在特定的 GitHub Discussion 中新增評論。貢獻指南可在儲存庫中找到。README 中還連結了最近的部落格文章,涵蓋諸如分配器比較和連接效能等主題。README 還指向了詳細描述函式庫的許多方面的開發者指南。

當 facebookincubator/velox 進入團隊流程後,應把本次核對的版本、命令、設定和輸出連同失敗案例保存。素材沒有提供的部分標成未說明,等實際維護時由負責人補上證據;這比把推測寫成固定功能更能支撐後續升級決定。 本段專看第 6 個核對面向:把 facebookincubator/velox 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

實際核對時應把 main 分支與最近可見的發布標籤分開記錄。素材未提供發布標籤,因此版本差異需要回到倉庫提交紀錄。 文章只把這些資料當作時間點,不將 star 或 issue 數量當成品質證明。 對 facebookincubator/velox 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookincubator/velox 的第 6 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把檔案敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

編輯結論

適合需要評估 facebookincubator/velox 檔案所述能力的讀者,不適合把本文當成完整效能或安全測試報告。先依 README 的實際命令與檔案入口試跑,記下版本、輸入、輸出與錯誤,再決定是否納入正式流程。對 facebookincubator/velox 未說明的相容性、資源消耗與部署限製,應保留為待確認項目,不能由文章推定。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
社群筆記

社群筆記