本日公開する 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 テーブルのパートは不変のオブジェクトです。Datastore はそれを、一台のサーバに溶接したローカルディスクではなく、Hanzo S3 上のオブジェクトとして置きます。Hanzo S3 は SeaweedFS 由来の私たちのストレージ層です。ステートレスなコンピュートのレプリカは、ゼロコピー複製を通じて、データの物理コピーを一つだけ共有します。
これは構想ではなく、実証済みです。スケールアウト試験では、ストレージポリシーが S3 を向く 500 万行のテーブルが system.parts でディスク seaweed を報告し、二つのコンピュートノードがその単一コピーの上で広がります。読み取り側を足してもデータはコピーされず、そこに取り付くだけです。分析負荷が跳ね、テラバイトを並べ直さずに数秒でクエリ容量を足したいときに欲しい性質がこれです。
-- 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 パスを実行します。結果として、素のビルドに比べ常駐メモリはおよそ半分、バイナリもはっきり小さくなります。aarch64 で BOLT を通すには、既定で有効になってリンク後の書き換えを静かに阻んでいた XRay の計装を切る必要がありました。その修正はソースツリーに入っています。実務上の効果は、同じクエリプラン、より少ないギガバイト、そして起動の速いバイナリです。
gRPC はなくなりました
データストアのクエリ経路はちょうど一つであるべきで、三つではありません。gRPC サーバは完全に外しました。contrib/grpc もなく、protobuf のサービス定義もなく、ENABLE_GRPC のビルド経路もありません。同じパスで、既定の設定から死んだ <grpc> ブロックも消し、出荷物がビルドと一致するようにしました。Datastore が話すのはネイティブ TCP (9000)、HTTP (8123)、サーバ間レプリケーション (9009) です。表面はこれで全部です。
先に進む輸送として意図しているのは、Cap'n Proto 由来の私たちの RPC である ZAP です。サーバのスタブは入りました。まだ生きているクエリ経路ではありません。完成したように匂わせるより、その線が今どこにあるかを正確に伝えます。
コーディネーションの向かう先
Replicated* テーブルは今日、組み込みの Raft、つまりサーバプロセスの中に同梱される ZooKeeper 互換の Keeper を通じて協調します。別デーモンはありません。これは動いており、本番で今走らせるものはこれです。
方向は、その Raft バックエンドを Quasar に置き換えることです。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
- ソース: github.com/hanzoai/datastore
- 製品: hanzo.ai/datastore
- ドキュメント: docs.hanzo.ai
arm64 のイメージは公開済みで、amd64 のビルドは CI を通じて続きます。これは私たち自身が動かしている分析とインサイトのバックエンドです。イベントを向け、列指向の速度で問い合わせてください。
続きを読む

同じプロセスの中でRaftを終わらせる:ZooKeeperの合意から直結するLux Quasarへ
Hanzo DatastoreがClickHouse Keeperの下にあるNuRaftエンジンをLux Quasarに置き換える仕組みです。後量子でリーダーのない合意をC++サーバへ直接リンクし、レプリケーションが話しているZooKeeperのAPIはそのまま残します。

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.