ClickHouse — công cụ phân tích thời gian thực trong nền tảng
Stack của 4buildsite có ClickHouse — cơ sở dữ liệu dạng cột được thiết kế riêng cho phân tích khối lượng lớn. Đây là nền tảng để chúng tôi xây dựng module thống kê lưu lượng truy cập và doanh số của nền tảng (đang phát triển): dữ liệu luôn thuộc về bạn, báo cáo được tính trên một hệ thống tách biệt khỏi website của bạn — kiến trúc được thiết kế đúng như vậy.
ClickHouse là gì và vì sao chúng tôi dùng
ClickHouse là cơ sở dữ liệu OLAP (phân tích trực tuyến) dạng cột, được tạo ra tại Yandex cho Yandex.Metrica — một trong những hệ thống phân tích web lớn nhất thế giới — và được mở mã nguồn năm 2016 theo giấy phép Apache 2.0. Nó được xây dựng cho đúng một việc và làm việc đó rất hiệu quả: tổng hợp nhanh trên khối lượng dữ liệu khổng lồ. Trong kiến trúc 4buildsite, ClickHouse là công cụ được chọn cho lớp thống kê: mỗi lượt truy cập, mỗi cú nhấp chuột và mỗi đơn hàng đều trở thành một sự kiện có thể phân tích.
Bí quyết nằm ở lưu trữ dạng cột: thay vì đọc toàn bộ từng “hàng”, ClickHouse chỉ đọc những cột mà báo cáo cần và xử lý chúng theo các khối lớn, vector hóa. Vì vậy, một câu hỏi như “hôm qua tôi có bao nhiêu khách truy cập, theo từng trang, theo từng nguồn” được trả lời trên hàng triệu sự kiện — điều mà cơ sở dữ liệu hướng hàng thông thường rất khó làm được.
Đây không phải công nghệ ngách: Cloudflare dùng nó để phân tích lưu lượng HTTP ở quy mô toàn cầu, còn Uber, eBay và Spotify dùng nó cho phân tích và xử lý log ở khối lượng rất lớn. Trên 4buildsite, chính công cụ này là một phần của stack nền tảng — bạn không cần thuê đội kỹ sư dữ liệu.
Thống kê tách biệt khỏi website — module được thiết kế như thế nào
Module thống kê của nền tảng đang được phát triển và kiến trúc của nó rất đơn giản: các sự kiện truy cập được thu thập bất đồng bộ và ghi vào ClickHouse, hoàn toàn tách biệt với các máy chủ phân phối trang của bạn. Khách truy cập không phải chờ phân tích, vì việc thu thập chạy tách biệt với máy chủ phân phối trang. Không có script theo dõi bên thứ ba nặng nề trên trang — việc thu thập ở mức tối thiểu và là first-party.
Các báo cáo trong panel.4buildsite.net sẽ được tính trực tiếp trong ClickHouse: lưu lượng theo trang, nguồn khách truy cập, tỷ lệ chuyển đổi, doanh số theo sản phẩm. Các phép tổng hợp thường dùng được tính trước qua materialized view ở mỗi lần ghi, nên bảng điều khiển không phải chạy lại một phép tính nặng mỗi lần bạn xem.
- Lưu lượng trực tiếp: lượt truy cập, trang, nguồn và thiết bị — có thể truy vấn sau khi thu thập
- Doanh số theo sản phẩm, đơn hàng và tỷ lệ chuyển đổi của cửa hàng, tổng hợp qua materialized view
- Lịch sử nhiều tháng, nhiều năm với chi phí thấp — nén dạng cột giảm dung lượng lưu trữ nhiều lần so với dữ liệu thô
- Tách biệt khỏi website: thu thập bất đồng bộ, báo cáo chạy trên hệ thống riêng
PostgreSQL + ClickHouse: vì sao chúng tôi dùng cả hai
Stack nền tảng kết hợp hai cơ sở dữ liệu vì chúng làm những việc khác nhau về bản chất. PostgreSQL là sổ cái giao dịch (OLTP): đơn hàng, thanh toán, tồn kho, tài khoản người dùng — những thao tác phải chính xác từng cái một, với bảo đảm giao dịch. ClickHouse là phòng phân tích (OLAP): đọc hàng triệu sự kiện cùng lúc để trả lời câu hỏi của bạn về lưu lượng và doanh số.
Nếu các báo cáo nặng chạy trên cùng cơ sở dữ liệu đang xử lý đơn hàng, mỗi báo cáo sẽ cạnh tranh tài nguyên với những khách hàng đang thanh toán đúng lúc đó. Việc tách OLTP/OLAP giảm đáng kể xung đột này: báo cáo nặng không chạy trên cùng cơ sở dữ liệu với đơn hàng của khách. Mỗi công cụ làm đúng việc mà nó được tạo ra để làm.
- PostgreSQL: đơn hàng, thanh toán Stripe, tồn kho, khách hàng — tính đúng đắn của giao dịch
- ClickHouse: sự kiện truy cập, báo cáo, thống kê — tổng hợp ở khối lượng lớn
- Thiết kế sao chép dữ liệu giao dịch liên quan sang ClickHouse dưới dạng sự kiện, nên báo cáo doanh số không bao giờ chạm vào cơ sở dữ liệu đang phục vụ cửa hàng của bạn
Phân tích first-party, thân thiện quyền riêng tư — thay cho Google Analytics
Nguyên tắc của module thống kê: dữ liệu website của bạn nằm trên hạ tầng của nền tảng. Dữ liệu không được gửi cho Google hay các mạng quảng cáo khác, không bị bán và không bị gộp với hồ sơ người dùng bên ngoài. Đó là phân tích first-party theo đúng nghĩa đen: dữ liệu về khách truy cập là của bạn.
Vì cách tiếp cận này không dùng cookie theo dõi của bên thứ ba, việc tuân thủ GDPR trở nên đơn giản hơn nhiều. Về bối cảnh: năm 2022, các cơ quan bảo vệ dữ liệu của Áo, Pháp và Ý đã tuyên bố việc dùng Google Analytics không tuân thủ GDPR do việc chuyển dữ liệu sang Hoa Kỳ. Với phân tích first-party đặt tại châu Âu, cả nhóm rủi ro này biến mất ngay từ đầu.
Cũng có một lợi ích thực tế trực tiếp: các báo cáo tính trong ClickHouse không bị lấy mẫu và không xuất hiện trễ hàng giờ như các báo cáo chuẩn trong công cụ phân tích miễn phí thường gặp. Số liệu đầy đủ, được tính từ chính các sự kiện đã thu thập.
Báo cáo cửa hàng và marketplace — module sẽ mang lại gì
Với cửa hàng trực tuyến, ClickHouse sẽ hỗ trợ trả lời những câu hỏi quan trọng: sản phẩm nào bán được, nguồn nào mang lại khách hàng thực sự mua, giỏ hàng bị bỏ dở ở đâu. Với marketplace nhiều người bán, cùng các phép tổng hợp đó sẽ chạy trên toàn bộ đơn hàng: khối lượng theo từng người bán, hoa hồng, sản phẩm hàng đầu theo danh mục — không cần xuất thủ công và không cần bảng tính.
Và ở quy mô lớn, chi phí vẫn được kiểm soát. Nén dạng cột giảm dữ liệu nhiều lần so với định dạng thô, nên bạn lưu được nhiều năm lịch sử với chi phí lưu trữ thấp. Khi lưu lượng tăng từ hàng nghìn lên hàng triệu sự kiện, các phép tổng hợp vẫn chạy trên cùng kiến trúc — công cụ được thiết kế cho hàng tỷ dòng ngay từ đầu, không phải vá thêm về sau.
Ưu điểm và hạn chế
Ưu điểm
- Tổng hợp trên hàng triệu sự kiện nhờ lưu trữ dạng cột và vector hóa.
- Thu thập tách biệt khỏi hệ thống phục vụ trang: phân tích chạy trên hệ thống riêng.
- Dữ liệu lưu lượng thuộc về bạn, nằm trên hạ tầng của nền tảng — không chuyển sang Google hay mạng quảng cáo.
- Không có cookie theo dõi của bên thứ ba — tuân thủ GDPR đơn giản hơn.
- Nén dạng cột mạnh — lưu nhiều năm lịch sử với chi phí lưu trữ thấp.
- Mã nguồn mở (Apache 2.0), không có giấy phép theo khối lượng — chi phí không phình ra khi lưu lượng tăng.
Hạn chế
- Không phải cơ sở dữ liệu giao dịch — cập nhật hoặc xóa từng dòng là thao tác nặng; vì vậy đơn hàng và thanh toán nằm trong PostgreSQL.
- Được tối ưu cho ghi theo lô lớn; nhiều lần chèn nhỏ, thường xuyên cần được gom lô — nền tảng xử lý việc này, nhưng đó là hạn chế thật của công cụ.
- JOIN phức tạp kém linh hoạt hơn trong PostgreSQL — lược đồ sự kiện phải được thiết kế cho phân tích ngay từ đầu.
- Tra cứu một dòng đơn lẻ (point lookup) chậm hơn so với cơ sở dữ liệu OLTP có chỉ mục — nó không thay thế cơ sở dữ liệu chính của cửa hàng.
Kết luận nhanh
ClickHouse là lựa chọn đúng cho phân tích ở khối lượng lớn: thống kê lưu lượng và doanh số gần thời gian thực, bằng dữ liệu của chính bạn, mà không dùng chung tài nguyên với hệ thống phục vụ website. Với đơn hàng, thanh toán và tồn kho thì PostgreSQL vẫn giữ vai trò — vì vậy stack 4buildsite kết hợp cả hai, mỗi bên làm tốt nhất việc của mình. Module thống kê xây dựng trên ClickHouse đang được phát triển.
Bảng thông số kỹ thuật
| Khả năng | Giới hạn / ngưỡng | Cách dùng điển hình | |
|---|---|---|---|
| Tổng hợp phân tích | Tổng hợp trên hàng triệu sự kiện (dạng cột + vector hóa) | Chậm khi tra cứu từng dòng — không dành cho truy vấn điểm OLTP | Báo cáo lưu lượng và doanh số (module thống kê, đang phát triển) |
| Nạp sự kiện | Khối lượng lớn, ghi theo lô | Chèn nhỏ, thường xuyên cần gom lô / async insert | Thu thập pageview, cú nhấp chuột, đơn hàng |
| Lưu trữ & nén | Nén dạng cột (LZ4/ZSTD), nhỏ hơn dữ liệu thô nhiều lần | Dữ liệu rất ngẫu nhiên nén kém hơn | Lịch sử sự kiện nhiều tháng, nhiều năm, chi phí thấp |
| Cập nhật & xóa | Mutation bất đồng bộ cho các chỉnh sửa thỉnh thoảng | Không phù hợp với UPDATE từng dòng thường xuyên | Xóa theo GDPR (dữ liệu của một người dùng, theo yêu cầu) |
| Materialized view | Tổng hợp được tính trước ở mỗi lần ghi | Phải định nghĩa trước các phép tổng hợp, theo từng báo cáo | Bảng điều khiển: doanh số theo ngày, sản phẩm, nguồn |
| Thời gian thực | Sự kiện có thể truy vấn sau khi xảy ra | Không phải hệ thống streaming ở mức mili giây | Thống kê lưu lượng và chuyển đổi gần thời gian thực |
ClickHouse so với PostgreSQL so với Google Analytics / BigQuery — cho phân tích
| Tiêu chí | ClickHouse (4buildsite) | PostgreSQL (cho phân tích) | Google Analytics / BigQuery |
|---|---|---|---|
| Tốc độ tổng hợp ở khối lượng lớn | Tổng hợp trên hàng triệu dòng nhờ lưu trữ dạng cột | Suy giảm rõ rệt trên hàng chục triệu dòng (lưu trữ theo hàng) | BigQuery nhanh; GA4 có báo cáo chuẩn tổng hợp sẵn, không có truy vấn tự do |
| Quyền sở hữu dữ liệu / GDPR | Dữ liệu của bạn, trên hạ tầng của nền tảng, tại châu Âu | Dữ liệu của bạn, trên máy chủ của bạn | Dữ liệu nằm ở Google; việc GA chuyển dữ liệu sang Hoa Kỳ bị các cơ quan EU xác định là không tuân thủ GDPR năm 2022 |
| Cookie & sự đồng ý | Không có cookie theo dõi của bên thứ ba | Tùy thuộc vào cách bạn tự triển khai | Cần banner đồng ý để theo dõi |
| Thời gian thực | Dữ liệu có thể truy vấn sau khi thu thập | Có thể, nhưng báo cáo nặng làm tải cơ sở dữ liệu giao dịch | Báo cáo chuẩn GA4 có thể trễ hàng giờ; BigQuery streaming tốn thêm phí |
| Chi phí ở khối lượng lớn | Mã nguồn mở — chi phí chỉ là hạ tầng, đã gồm trong gói đăng ký | Tăng theo chỉ mục, vacuum và phần cứng ở khối lượng lớn | BigQuery tính phí theo khối lượng truy vấn; gói doanh nghiệp của GA đắt |
| Tác động đến tốc độ website | Tách biệt — thu thập bất đồng bộ, báo cáo trên hệ thống riêng | Báo cáo có thể cạnh tranh với đơn hàng trên cùng cơ sở dữ liệu | Script bên thứ ba (gtag.js) trên trang — thêm JavaScript và request bên ngoài |
Câu hỏi thường gặp
ClickHouse có làm chậm website hoặc cửa hàng của tôi không?
Không. ClickHouse chạy trên một hệ thống tách biệt với hệ thống phục vụ trang của bạn — kiến trúc được thiết kế đúng như vậy. Các sự kiện truy cập được gửi bất đồng bộ, và báo cáo không bao giờ chạm vào cơ sở dữ liệu của cửa hàng.
Tại sao không dùng Google Analytics cho đơn giản?
Có ba lý do. Dữ liệu thuộc về bạn, nằm trên hạ tầng của nền tảng, không phải ở Google. Bạn không cần cookie theo dõi của bên thứ ba, nên tuân thủ GDPR đơn giản hơn — năm 2022, các cơ quan của Áo, Pháp và Ý đã xác định GA không tuân thủ GDPR. Và báo cáo đầy đủ, không bị lấy mẫu hay trễ hàng giờ.
ClickHouse khác PostgreSQL thế nào — vì sao cần cả hai?
PostgreSQL là cơ sở dữ liệu giao dịch (OLTP): xử lý đơn hàng, thanh toán và tồn kho từng cái một, với bảo đảm về tính đúng đắn. ClickHouse là cơ sở dữ liệu phân tích (OLAP): đọc hàng triệu sự kiện cùng lúc để làm báo cáo. Việc tách đôi giúp giảm nguy cơ một báo cáo nặng làm chậm đơn hàng của khách.
Dữ liệu lưu lượng của tôi có an toàn và tuân thủ GDPR không?
Có — ngay từ thiết kế. Thống kê là first-party: chúng nằm trên hạ tầng của nền tảng, tại châu Âu, và không bao giờ bị bán hay chia sẻ với mạng quảng cáo. Cách tiếp cận này không dùng cookie theo dõi của bên thứ ba, và dữ liệu của một người dùng có thể bị xóa theo yêu cầu, theo đúng GDPR.
Thống kê “thời gian thực” đến mức nào?
Một sự kiện — lượt truy cập, cú nhấp chuột, đơn hàng — có thể truy vấn trong báo cáo sau khi xảy ra. Các phép tổng hợp trên khoảng thời gian dài (nhiều tháng, nhiều năm) vẫn được xử lý hiệu quả, vì ClickHouse được xây dựng chính xác cho loại truy vấn này.
Tôi có cần cài đặt gì để có thống kê trên website không?
Bạn sẽ không cần. Module thống kê đang được phát triển và được xây dựng như một phần của nền tảng: khi nó hoạt động trong bảng quản trị, việc thu thập sẽ tự động bắt đầu cho các website đã xuất bản — không cần cài script và không cần tài khoản bên ngoài.