即日起正式推出 Hanzo Datastore:迎向後量子時代的欄式 OLAP 分析引擎
這是從 ClickHouse 分出的欄式倉儲,依 Hanzo S3 上儲存與運算分離的方式重做。透過剖析導引與連結期最佳化,常駐記憶體大約只剩一半,gRPC 也已移除,並留下一條通往無領導者、後量子協調的路。

本頁內容
今天我們推出 Hanzo Datastore,它是 Hanzo 資料平台裡負責 OLAP 的那一半。程式碼分自 ClickHouse 26.6,拿掉原本的品牌,再照我們實際跑分析的做法重做:儲存與運算分開,放在 Hanzo S3;最佳化過的執行檔更精簡;舊的 RPC 介面已經移除。映像檔現在就在 ghcr.io/hanzoai/datastore:26.6.1.1。
我們沒有另寫一套資料庫。ClickHouse 是世上最好的欄式引擎,我們以它為根基。動到的是經營一整隊機器時真正要緊的地方:儲存底層、建置、傳輸,以及協調往後怎麼走。
儲存與運算分開
MergeTree 資料表的 part 是不可變的物件。Datastore 把它們當成物件放在 Hanzo S3,也就是我們從 SeaweedFS 衍生的儲存層,而不是焊在某一台伺服器上的本機磁碟。沒有狀態的運算複本接著用零拷貝複寫,共用同一份實體資料。
這件事已經驗證,不是口號。在我們的橫向擴展測試裡,一張儲存原則指向 S3、有 500 萬列的表,會在 system.parts 回報磁碟 seaweed,兩台運算節點就在這唯一一份資料上擴出去。多加一個讀取端不會把資料再拷一份,而是直接掛上去。分析負載突然升高、得在幾秒內補上查詢容量、又不想把數 TB 重新搬動時,要的就是這個性質。
-- parts live on S3, not on a node's local disk
SELECT name, disk_name FROM system.parts WHERE table = 'events' LIMIT 1;
-- ┌─name──────┬─disk_name─┐
-- │ all_1_1_0 │ seaweed │
-- └───────────┴───────────┘
記憶體大約少一半,執行檔更小
發行版建置會跑剖析導引最佳化、精簡的連結期最佳化,以及連結之後的 BOLT 處理。結果是常駐記憶體大約只有原版建置的一半,執行檔也明顯更小。要讓 BOLT 在 aarch64 上走通,得關掉 XRay 插樁。它原先預設開啟,並悄悄擋住連結後的改寫。這項修正已經在原始碼樹裡。實務上的差別是:同一份查詢計畫、更少的 GB,以及啟動更快的執行檔。
gRPC 已經拿掉
資料庫該有的查詢路徑正好一條,不是三條。我們把 gRPC 伺服端整段移除:沒有 contrib/grpc,沒有 protobuf 的服務定義,也沒有 ENABLE_GRPC 這條建置路徑。同一輪裡,預設設定中已經失效的 <grpc> 區塊也清掉了,讓送出去的產品和建置一致。Datastore 說的是原生 TCP(9000)、HTTP(8123),以及伺服器之間的複寫(9009)。表面到此為止。
接下來打算走的傳輸是 ZAP,我們從 Cap'n Proto 衍生的 RPC。伺服端的樁已經進樹,它還不是線上的查詢路徑。我們寧可把這條線目前停在哪裡講明白,也不假裝它已經完成。
協調要往哪裡走
Replicated* 資料表目前透過內嵌的 Raft 協調,也就是跟伺服器行程一起交付、相容於 ZooKeeper 的 Keeper,沒有另外的常駐程式。它能運作,也是你現在在正式環境裡跑的東西。
方向是用 Quasar 換掉這層 Raft 後端。Quasar 來自 Lux,是無領導者、後量子的共識,並以原生方式連進 C++ 伺服器。這道接縫是真的:已有 C++ 程式透過 C ABI 驅動原生共識引擎——打開一條鏈、追加一筆複寫紀錄、推進信心投票、觀察最終性——沒有 Raft,也沒有零知識那一套。這證明替換是連結問題,不是重寫。它還不是正式環境的協調層,我們也不會裝作它已經是。
另外一半
Datastore 做的是 OLAP。平台的 OLTP 那一半,是架在 SQLite/Base 上的去中心化 SQL 引擎:設計已定,正在打造,尚未交付。若你今天要的是本地優先、單一檔案的資料故事,這條脈絡已經出現在 Hanzo Brain;兩半共同乘坐的儲存底層,則是我們在 Hanzo Storage 推出的那一層。
跑起來
docker run -d --name datastore \
-p 8123:8123 -p 9000:9000 \
ghcr.io/hanzoai/datastore:26.6.1.1
arm64 映像檔現已公開;amd64 建置會經由 CI 接著跟上。這是我們自己在跑的分析與洞察後端。把事件打過來,再以欄式的速度查回去。
繼續閱讀

在同一個行程裡終結 Raft:改以無領導者的後量子共識 Lux Quasar 換下 ZooKeeper 的共識引擎
本文說明 Hanzo Datastore 如何把 ClickHouse Keeper 底下的 NuRaft 引擎換成 Lux Quasar。換上的是後量子、沒有單一領導者的共識,直接連進同一套 C++ 伺服器,複製層繼續呼叫原來的 ZooKeeper 介面,呼叫方式維持不變。

Hanzo Insights: Product Analytics That Respects Privacy
Introducing Hanzo Insights — product analytics with event tracking, funnels, cohorts, and session replay, without selling user data.

Hanzo Storage: S3-Compatible Object Storage
Launching Hanzo Storage — S3-compatible object storage with integrated CDN and no egress fees.