Hôm trước, tôi đang ngồi cùng team quant của một quỹ crypto ở Singapore, pipeline ingest dữ liệu tick Deribit bị đổ vỡ liên tục. Màn hình console nhấp nháy đỏ lòm:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.deribit.com', port=443):
Max retries exceeded with url: /api/v2/public/get_tradingview_chart_data?...
(Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object>:
Failed to establish a new connection: [Errno 110] Connection timed out'))

Ba mươi phút debug, tôi nhận ra nguyên nhân không phải code mà là kiến trúc: team vẫn đang dùng PostgreSQL + TimescaleDB để nuốt 2,4 tỷ dòng tick mỗi tháng, và mỗi lần replay backtest bị timeout ở phút thứ 7. Đó là lúc chúng tôi quyết định benchmark ClickHouse làm kho lưu trữ tick chính. Bài viết này ghi lại toàn bộ quá trình: từ curl kéo CSV Deribit, đến schema MergeTree, đến các con số benchmark thực tế trên cụm 4 node.

1. Kiến trúc pipeline tổng quan

Mục tiêu của chúng tôi: ingest tick trade của Deribit (BTC/ETH options + perpetual) với tần suất mỗi giây vài nghìn dòng, lưu trữ 12 tháng, query lại trong dưới 200ms cho các truy vấn aggregation phổ biến.