Giới Thiệu ClickHouse

Trong thời đại dữ liệu ngày càng phát triển nhanh chóng, doanh nghiệp không chỉ cần lưu trữ dữ liệu mà còn phải phân tích và khai thác giá trị từ dữ liệu một cách hiệu quả. Những hệ quản trị cơ sở dữ liệu truyền thống như MySQL, PostgreSQL thường không đủ nhanh hoặc tối ưu để xử lý khối lượng dữ liệu khổng lồ, đặc biệt trong các truy vấn phân tích (OLAP – Online Analytical Processing).

ClickHouse – viết tắt của “Clickstream Data Warehouse” – được phát triển bởi Yandex từ năm 2009 và mở mã nguồn từ năm 2016. Nó được thiết kế chuyên biệt để xử lý các truy vấn phân tích khối lượng lớn với tốc độ cực nhanh. Nhờ vào kiến trúc lưu trữ theo cột (columnar storage), ClickHouse cho phép quét, lọc và tổng hợp hàng tỷ bản ghi trong thời gian tính bằng giây, rất phù hợp cho các hệ thống phân tích thời gian thực.


So sánh ClickHouse với MySQL

1. Kiến trúc lưu trữ

Tính năngClickHouseMySQL
Kiểu lưu trữTheo cột (Column-oriented)Theo hàng (Row-oriented)
Truy vấn nhanh choTổng hợp, thống kê dữ liệu lớnTruy vấn theo khóa chính, CUD
Phù hợp vớiPhân tích dữ liệu (OLAP)Giao dịch (OLTP)

Trong MySQL, mỗi lần truy vấn dữ liệu, hệ thống cần đọc toàn bộ bản ghi (gồm cả những cột không cần thiết), gây lãng phí tài nguyên. Trong khi đó, ClickHouse chỉ đọc các cột cần thiết nên hiệu suất cao hơn rất nhiều cho truy vấn dạng thống kê.

2. Khả năng mở rộng

ClickHouse hỗ trợ sharding (chia nhỏ dữ liệu theo cụm), replication, và cluster multi-node, giúp mở rộng dễ dàng theo chiều ngang. Ngược lại, MySQL thường gặp khó khăn trong việc mở rộng quy mô dữ liệu mà vẫn giữ hiệu suất cao.

3. Khả năng cập nhật dữ liệu

ClickHouse không tối ưu cho các thao tác UPDATE, DELETE thường xuyên vì dữ liệu được lưu trữ dạng bất biến theo cột. Thay vào đó, mô hình sử dụng ClickHouse là kiểu ghi thêm (append-only), rất giống cách mà các hệ thống logging, tracking hoạt động.


Một số bài toán ứng dụng ClickHouse

Dưới đây là một số kịch bản ứng dụng thực tế phổ biến của ClickHouse:

1. Phân tích hành vi người dùng

Bạn có thể thu thập logs của người dùng truy cập website (clickstream data), và lưu vào ClickHouse để phân tích:

  • Lượt truy cập theo ngày/giờ.
  • Tỷ lệ chuyển đổi (conversion rate).
  • Hành trình người dùng (user journey).

Ví dụ:

SELECT
  toDate(visit_time) as day,
  countDistinct(user_id) as unique_visitors
FROM visits
GROUP BY day
ORDER BY day;

2. Hệ thống báo cáo doanh thu

Nếu bạn là một sàn TMĐT hoặc ứng dụng bán hàng, bạn có thể dùng ClickHouse để xây dựng báo cáo:

  • Doanh thu theo thời gian.
  • Doanh thu theo khu vực, sản phẩm, chiến dịch quảng cáo.
  • Phân tích chi tiết dựa trên các chỉ số như AOV, conversion rate, churn rate…

3. Tracking sự kiện thời gian thực

ClickHouse cực kỳ phù hợp cho việc lưu trữ và phân tích event stream từ ứng dụng di động, web, IoT. Ví dụ:

  • Sự kiện nhấn nút.
  • Đăng nhập thành công/thất bại.
  • Cảm biến nhiệt độ gửi dữ liệu mỗi giây.

Kết hợp với Kafka hoặc RabbitMQ, bạn có thể stream dữ liệu vào ClickHouse một cách liên tục, sau đó dashboard sẽ truy vấn dữ liệu gần như real-time.


Sử dụng ClickHouse với Docker

1. Cài đặt bằng Docker Compose

Tạo file docker-compose.yml như sau:

version: '3.8'

services:
  clickhouse-server:
    image: clickhouse/clickhouse-server:latest
    container_name: clickhouse
    ports:
      - "8123:8123"   # HTTP Interface
      - "9000:9000"   # Native Client
    volumes:
      - clickhouse_data:/var/lib/clickhouse
    ulimits:
      nofile:
        soft: 262144
        hard: 262144

volumes:
  clickhouse_data:

Sau đó khởi chạy:

docker-compose up -d

2. Truy cập ClickHouse

Bạn có thể kết nối với ClickHouse bằng:

Trình duyệt:

Command line:

docker exec -it clickhouse clickhouse-client

Ví dụ tạo bảng và insert dữ liệu:

CREATE TABLE user_events (
  id UInt64,
  user_id UInt64,
  event_type String,
  created_at DateTime
) ENGINE = MergeTree()
ORDER BY created_at;

INSERT INTO user_events VALUES (1, 101, 'click', now()), (2, 102, 'view', now());

3. Truy vấn dữ liệu

SELECT
  event_type,
  count() as total_events
FROM user_events
GROUP BY event_type;

Các công cụ hỗ trợ ClickHouse

  • Grafana: Có thể kết nối ClickHouse làm nguồn dữ liệu để trực quan hóa biểu đồ, dashboard real-time.
  • Tabix UI: Giao diện web nhẹ nhàng, đẹp, cho phép thao tác với ClickHouse giống như Adminer hay phpMyAdmin.
  • clickhouse-client: CLI mặc định, hỗ trợ nhiều truy vấn mạnh mẽ.
  • Kafka/Fluentd/Vector: Dùng để stream dữ liệu từ log hoặc app vào ClickHouse.

Một số lưu ý khi dùng ClickHouse

  1. Không nên dùng cho OLTP: Không phù hợp để chạy hệ thống chính như đăng ký, đăng nhập, shopping cart…
  2. Tối ưu thiết kế bảng: Sắp xếp cột ORDER BY ảnh hưởng rất lớn tới hiệu suất truy vấn.
  3. Partitioning: Nên phân chia dữ liệu theo ngày, tháng để tránh full scan.
  4. Append-only: Hãy nghĩ theo hướng ghi thêm dữ liệu, thay vì cập nhật liên tục.
  5. Tối ưu với Materialized View: Bạn có thể tạo các bảng tổng hợp để tăng tốc độ phân tích dữ liệu lớn.

Related Posts