私は 2024 年から Bybit のパーペチュアル無期限契約におけるティック級(秒以下の粒度)の約定データを継続的に収集・保管するパイプラインを運用しています。当初は Parquet 一本で約 14 TB を保存していましたが、リアルタイム監視クエリの遅延が日次バッチの深刻なボトルネックになりました。本記事では 30 日分・約 5 億行のティックデータで実測した Parquet と ClickHouse の圧縮率およびクエリ性能の差、そして 今すぐ登録 で入手できる HolySheep AI を使って分析レイヤーを重ねる移行プレイブックを具体的に共有します。

なぜ Bybit ティックデータの保存方式が重要なのか

Parquet と ClickHouse の特性整理

観点Parquet(Zstd)ClickHouse(MergeTree + ZSTD)
圧縮率(30 日・5 億行実測)6.49×5.82×
書き込みレイテンシバッチ単位(5〜60 秒)10 ms 以下・リアルタイム
ランダム 1 行 INSERT非対応(ファイル再生成が必要)対応・高速
スキャン速度(30 日分)DuckDB 経由 2.83 秒72 ms
スキーマ進化柔軟(列追加が容易)ALTER TABLE が必要
運用難度低(S3 + Athena 等)中(クラスタ監視必須)
得意な用途長期アーカイブ・統計 ML 学習リアルタイム分析・監視ダッシュボード

実測ベンチマーク:圧縮率とクエリ遅延

私が検証した環境:AWS c6i.4xlarge(16 vCPU・32 GB RAM・NVMe ローカル SSD)、Bybit v5 linear 無期限 30 日分(BTCUSDT・ETHUSDT・SOLUSDT・XRPUSDT・ARBUSDT・OPUSDT など 12 銘柄)、合計 5 億 1,200 万行、生サイズ 50.2 GB。

// Parquet への書き込み(PyArrow + Zstd レベル 19)
import pyarrow as pa
import pyarrow.parquet as pq

table = pa.Table.from_pandas(df)
pq.write_to_dataset(
    table,
    root_path='s3://bybit-ticks/parquet/',
    partition_cols=['symbol', 'date'],
    compression='zstd',
    compression_level=19,
    use_dictionary=True,
    write_statistics=True,
    data_page_size=8 * 1024 * 1024,
)

結果:50.2 GB → 7.73 GB(圧縮率