ClickHouse


🔷 1. ClickHouse là gì?

ClickHouse là một column-oriented OLAP database management system được tối ưu cho:

  • Tốc độ truy vấn cực nhanh

  • Xử lý dữ liệu lớn (big data)

  • Tải ghi cao, truy vấn phân tích nhanh

  • Time-series và log analytics

  • Được sử dụng bởi Yandex, Cloudflare, Uber, Lyft, Alibaba, và nhiều công ty lớn khác.


🔷 2. So sánh Column-Oriented vs Row-Oriented

Row-Oriented (MySQL, Postgres)
Column-Oriented (ClickHouse)

Dùng tốt cho

OLTP - transactional workloads

OLAP - analytical workloads

Truy vấn

SELECT * WHERE id = 5

SELECT AVG(sales) BY region

Hiệu suất

Nhanh khi ghi/lấy 1 dòng

Nhanh khi query 1 cột trên nhiều dòng

Cách lưu

Theo dòng

Theo cột


🔷 3. Khi nào nên dùng ClickHouse?

ClickHouse phù hợp khi bạn cần:

✅ Realtime analytics ✅ Thống kê logs, events, time-series ✅ Truy vấn dữ liệu lớn với nhiều phép tính aggregate (AVG, SUM, COUNT, GROUP BY...) ✅ Truy vấn phức tạp với tốc độ dưới 100ms trên TB dữ liệu


🔷 4. Kiến trúc tổng quan

  • MergeTree Engine: nền tảng cho bảng hỗ trợ index, partition, TTL...

  • Materialized Views: tính toán dữ liệu sẵn theo nhu cầu (dạng cache).

  • Distributed tables: xử lý dữ liệu phân tán.

  • Compression: cực tốt, giảm chi phí lưu trữ đáng kể.


🔷 5. Cài đặt cơ bản (dùng Docker)

docker run -d --name clickhouse \
  -p 8123:8123 \
  -p 9000:9000 \
  yandex/clickhouse-server
  • Port 8123: HTTP interface

  • Port 9000: Native TCP protocol (dùng cho Golang client)


🔷 6. Tạo bảng và insert dữ liệu

-- Tạo bảng
CREATE TABLE users (
    id UInt64,
    name String,
    age UInt8,
    created_at DateTime
) ENGINE = MergeTree
ORDER BY id;

-- Insert
INSERT INTO users VALUES (1, 'Tài', 27, now());

-- Query
SELECT name, age FROM users WHERE age > 20;

🔷 7. Các loại Engine phổ biến

Engine
Mô tả

MergeTree

Cơ bản nhất, hỗ trợ index, TTL, PARTITION

ReplacingMergeTree

Xóa bản ghi cũ, giữ lại bản mới

SummingMergeTree

Dùng để auto cộng dồn dữ liệu

AggregatingMergeTree

Lưu trữ kết quả tổng hợp

Distributed

Dùng cho cluster, phân mảnh ngang


🔷 8. Tích hợp với Golang

Dùng client như: ClickHouse-Go

import "github.com/ClickHouse/clickhouse-go/v2"

conn, err := clickhouse.Open(&clickhouse.Options{
    Addr: []string{"localhost:9000"},
    Auth: clickhouse.Auth{
        Database: "default",
        Username: "default",
        Password: "",
    },
})

🔷 9. Các điểm mạnh nổi bật

✅ Ghi hàng triệu bản ghi mỗi giây ✅ Truy vấn cực nhanh trên hàng tỷ dòng ✅ Column compression rất tốt (giảm dung lượng ~5–10x) ✅ Hỗ trợ các function analytics nâng cao ✅ Có thể mở rộng theo chiều ngang (scale out)


🔷 10. Các điểm cần lưu ý

❌ Không hỗ trợ cập nhật theo dòng (row-based update) như MySQL ✅ Có thể update theo batch hoặc dùng ReplacingMergeTree ❌ Không hỗ trợ transaction ✅ Nhưng có khả năng xử lý atomic insert


🔷 11. Use Cases phổ biến

  • Monitoring (logs, metrics) – thay Prometheus/Grafana backend

  • Realtime analytics – lượt truy cập, dashboard, tracking

  • E-commerce product insights

  • Fintech / fraud detection

  • IoT data ingestion & query


Last updated