ClickHouse Bổ Sung Hỗ Trợ UPDATE Nhưng Cộng Đồng Cảnh Báo Không Nên Sử Dụng Cho Các Trường Hợp OLTP

Nhóm Cộng đồng BigGo
ClickHouse Bổ Sung Hỗ Trợ UPDATE Nhưng Cộng Đồng Cảnh Báo Không Nên Sử Dụng Cho Các Trường Hợp OLTP

ClickHouse gần đây đã giới thiệu hỗ trợ câu lệnh UPDATE trong phiên bản 25.7, đánh dấu một cột mốc quan trọng cho cơ sở dữ liệu phân tích dạng cột này. Sự phát triển này đã khơi dậy cuộc thảo luận sôi nổi trong cộng đồng về việc khi nào nên sử dụng ClickHouse so với PostgreSQL , với nhiều nhà phát triển chia sẻ những bài học kinh nghiệm về sự khác biệt cơ bản giữa các hệ thống OLAP và OLTP.

Kiểm Tra Thực Tế: Cập Nhật Đi Kèm Với Những Hạn Chế Lớn

Mặc dù khả năng UPDATE mới của ClickHouse thể hiện công việc kỹ thuật ấn tượng, các thành viên cộng đồng nhanh chóng chỉ ra những hạn chế. Cơ sở dữ liệu này vẫn hoạt động khác biệt cơ bản so với các hệ thống dựa trên hàng truyền thống như PostgreSQL . Các cập nhật trong ClickHouse tạo ra các phần vá được hợp nhất trong nền, thay vì trực tiếp sửa đổi dữ liệu tại chỗ.

Không có cơ sở dữ liệu nào khiến tôi điên cuồng hơn ClickHouse . Nếu khối lượng công việc của bạn chỉ là thêm/chèn thì xin chúc mừng, nó thật tuyệt vời, bạn sẽ có trải nghiệm tốt. Nếu bạn cần cập nhật dữ liệu... Thì hãy chuẩn bị tinh thần.

Quan điểm này phản ánh sự đồng thuận rộng rãi trong cộng đồng: ClickHouse xuất sắc trong những gì nó được thiết kế, nhưng việc cố gắng ép nó vào các vai trò OLTP dẫn đến thất vọng và các vấn đề về hiệu suất.

So sánh Kiến trúc:

  • PostgreSQL: Lưu trữ theo hàng trong các trang 8KB với metadata giao dịch (xmin/xmax) cho MVCC
  • ClickHouse: Lưu trữ theo cột với các tiến trình merge chạy nền cho việc cập nhật
  • Cơ chế cập nhật: PostgreSQL sửa đổi tuple tại chỗ; ClickHouse tạo các patch part được merge bởi các tiến trình chạy nền
  • Tác động bộ nhớ: Cập nhật PostgreSQL thường chỉ ảnh hưởng đến một memory block; ClickHouse có thể yêu cầu chạm vào nhiều trang bộ nhớ

Kiến Trúc Quan Trọng Hơn Các Bài Kiểm Tra Hiệu Suất

Sự khác biệt kiến trúc cơ bản giữa các hệ thống này khiến việc so sánh trực tiếp trở nên thách thức. PostgreSQL lưu trữ dữ liệu trong các trang 8KB với metadata giao dịch cho mỗi tuple, giúp cập nhật một hàng hiệu quả. Lưu trữ dạng cột của ClickHouse có nghĩa là việc cập nhật nhiều trường trong một hàng đòi hỏi phải chạm vào nhiều trang bộ nhớ, khiến các cập nhật điểm trở nên tốn kém hơn về bản chất.

Các thành viên cộng đồng nhấn mạnh rằng đây không chỉ là chi tiết triển khai—chúng phản ánh triết lý thiết kế cốt lõi. PostgreSQL ưu tiên tuân thủ ACID và tính toàn vẹn giao dịch, trong khi ClickHouse tối ưu hóa cho các khối lượng công việc phân tích nơi dữ liệu thường được ghi một lần và đọc nhiều lần.

Phương Pháp Lai Ngày Càng Được Ưa Chuộng

Thay vì chọn một cơ sở dữ liệu thay cho cơ sở dữ liệu khác, nhiều tổ chức đang áp dụng kiến trúc lai. Cuộc thảo luận cộng đồng tiết lộ một mô hình rõ ràng: sử dụng PostgreSQL cho các khối lượng công việc giao dịch và ClickHouse cho phân tích, với Change Data Capture (CDC) kết nối hai hệ thống.

Việc ClickHouse mua lại PeerDB đã làm cho phương pháp này dễ tiếp cận hơn, cung cấp khả năng CDC bản địa có thể xử lý các cơ sở dữ liệu từ hàng chục gigabyte đến hàng chục terabyte. Điều này cho phép các tổ chức duy trì PostgreSQL cho dữ liệu ứng dụng cốt lõi của họ trong khi tận dụng hiệu suất phân tích vượt trội của ClickHouse .

Các Trường Hợp Sử Dụng Được Khuyến Nghị:

  • PostgreSQL: Khối lượng công việc OLTP, ứng dụng tài chính, cập nhật từng hàng theo thời gian thực, các ứng dụng yêu cầu đảm bảo ACID nghiêm ngặt
  • ClickHouse: Khối lượng công việc OLAP, dữ liệu chuỗi thời gian, phân tích, các tình huống chỉ thêm dữ liệu, xử lý dữ liệu hàng loạt
  • Phương pháp kết hợp: PostgreSQL cho dữ liệu giao dịch + ClickHouse cho phân tích thông qua CDC (Change Data Capture)
  • Lịch trình di chuyển: Di chuyển quy mô nhỏ đến trung bình: vài tuần; di chuyển OLAP thời gian thực quy mô lớn hơn: 1-2 tháng

Sự Đánh Đổi Giữa Hiệu Suất và Tính Nhất Quán

Kết quả kiểm tra hiệu suất cho thấy lợi thế về tốc độ của ClickHouse đi kèm với những lưu ý quan trọng về đảm bảo tính nhất quán. ClickHouse mặc định ghi bất đồng bộ (fsync_after_insert = false), trong khi PostgreSQL mặc định commit đồng bộ. Sự khác biệt cơ bản này trong đảm bảo độ bền giải thích phần lớn khoảng cách hiệu suất.

Các thành viên cộng đồng lưu ý rằng so sánh công bằng sẽ yêu cầu điều chỉnh cài đặt commit đồng bộ của PostgreSQL , mặc dù kết quả có thể vẫn tương tự cho các thao tác UPDATE do sự khác biệt kiến trúc cơ bản.

Sự khác biệt về hiệu suất chính:

  • Cập nhật một dòng: PostgreSQL ~2ms (bộ nhớ đệm nóng) so với ClickHouse ~6ms
  • Cập nhật hàng loạt: ClickHouse nhanh hơn PostgreSQL từ 5 đến 45 lần
  • Cài đặt độ bền mặc định: PostgreSQL sử dụng fsync = ONsynchronous_commit = ON, trong khi ClickHouse sử dụng fsync_after_insert = false
  • Tuân thủ ACID: PostgreSQL tuân thủ đầy đủ ACID cho tất cả các giao dịch; ClickHouse chỉ tuân thủ ACID ở cấp độ máy chủ

Đường Cong Học Tập và Thách Thức Vận Hành

Các nhà phát triển chuyển đổi từ cơ sở dữ liệu truyền thống sang ClickHouse báo cáo đường cong học tập đáng kể, thường từ vài tuần đến vài tháng tùy thuộc vào độ phức tạp của khối lượng công việc. Cộng đồng đặc biệt nhấn mạnh các hành vi mặc định khác nhau của ClickHouse , chẳng hạn như xử lý null join, có thể làm người dùng PostgreSQL bất ngờ.

Tuy nhiên, những người thành công vượt qua quá trình chuyển đổi này thường trở thành những người ủng hộ mạnh mẽ, đặc biệt là cho các khối lượng công việc phân tích nơi ClickHouse có thể mang lại cải thiện hiệu suất gấp 100 lần so với các hệ thống dựa trên hàng truyền thống.

Sự đồng thuận nổi lên từ các cuộc thảo luận cộng đồng rất rõ ràng: hiểu yêu cầu khối lượng công việc của bạn trước, sau đó chọn công cụ phù hợp. Hỗ trợ UPDATE mới của ClickHouse không biến nó thành cơ sở dữ liệu OLTP đa mục đích, nhưng nó làm cho nó linh hoạt hơn cho các khối lượng công việc hỗn hợp nơi cập nhật thỉnh thoảng là cần thiết trong các hệ thống chủ yếu phân tích.

Tham khảo: You can't UPDATE what you can't find: ClickHouse vs PostgreSQL

Một ảnh chụp từ blog của ClickHouse thảo luận về so sánh hiệu suất giữa ClickHouse và PostgreSQL, tập trung vào các yêu cầu khối lượng công việc và khả năng cơ sở dữ liệu
Một ảnh chụp từ blog của ClickHouse thảo luận về so sánh hiệu suất giữa ClickHouse và PostgreSQL, tập trung vào các yêu cầu khối lượng công việc và khả năng cơ sở dữ liệu