2 điểm bởi GN⁺ 2024-10-23 | 1 bình luận | Chia sẻ qua WhatsApp

Giới thiệu

  • JSON đã trở thành định dạng tiêu chuẩn để xử lý dữ liệu bán cấu trúc và phi cấu trúc trong các hệ thống dữ liệu hiện đại.
  • ClickHouse nhận thức được tầm quan trọng của JSON và đã giải quyết một số thách thức trong việc sử dụng JSON hiệu quả ở quy mô lớn.

Thách thức

  • Thách thức 1: Lưu trữ thực sự theo hướng cột
    Để xử lý dữ liệu JSON hiệu quả như các kiểu cột khác, cần lưu trữ các đường dẫn JSON theo cách hướng cột.

  • Thách thức 2: Dữ liệu thay đổi động và vấn đề tích hợp kiểu
    Cần duy trì tính toàn vẹn dữ liệu bằng cách cho phép lưu trữ các kiểu dữ liệu khác nhau cho các đường dẫn JSON.

  • Thách thức 3: Ngăn chặn sự bùng nổ số lượng tệp dữ liệu cột trên đĩa
    Khi có nhiều khóa JSON duy nhất, cần đặt giới hạn cho việc tạo cột để tránh số lượng tệp cột tăng bùng nổ.

  • Thách thức 4: Lưu trữ dày đặc
    Khi có nhiều khóa JSON duy nhất nhưng hiếm gặp, cần tránh lưu trữ lặp lại các giá trị NULL hoặc giá trị mặc định.

Kiểu dữ liệu JSON mới

  • ClickHouse giới thiệu một kiểu dữ liệu JSON mới để xử lý JSON hiệu năng cao.
  • Kiểu này hỗ trợ dữ liệu thay đổi động, đồng thời duy trì mức nén dữ liệu cao và hiệu năng truy vấn tốt.
  • Có thể điều chỉnh hiệu năng bằng cách cung cấp gợi ý cho việc phân tích cú pháp JSON.

Khối xây dựng 1 - Kiểu Variant

  • Kiểu Variant cho phép lưu trữ hiệu quả các giá trị có kiểu dữ liệu khác nhau trong cùng một cột của bảng.
  • Với mỗi kiểu dữ liệu, một cột con riêng biệt được sử dụng để duy trì tính toàn vẹn dữ liệu.

Khối xây dựng 2 - Kiểu Dynamic

  • Kiểu Dynamic mở rộng kiểu Variant để có thể lưu trữ nhiều kiểu dữ liệu khác nhau mà không cần chỉ định kiểu trước.
  • Giới hạn số lượng kiểu được lưu trữ để ngăn sự bùng nổ của các tệp cột.

Kiểu JSON của ClickHouse

  • Dựa trên các kiểu Variant và Dynamic, kiểu JSON mới được triển khai để giải quyết mọi thách thức.
  • Có thể lưu trữ bất kể cấu trúc của đối tượng JSON và đọc giá trị bằng cách dùng các đường dẫn JSON làm cột con.

Tóm tắt của GN⁺

  • Kiểu dữ liệu JSON mới của ClickHouse tập trung vào việc giải quyết các vấn đề hiệu năng của JSON trong phân tích dữ liệu quy mô lớn.
  • Kiểu này hỗ trợ nhiều kiểu dữ liệu khác nhau, đồng thời cung cấp hiệu năng cao và khả năng mở rộng.
  • Ngoài JSON, nó còn đặt nền tảng để hỗ trợ các kiểu bán cấu trúc khác như XML, YAML.
  • Hữu ích cho các nhà phát triển sử dụng ClickHouse và mang lại lợi thế về nén dữ liệu cũng như hiệu năng truy vấn.

1 bình luận

 
GN⁺ 2024-10-23
Ý kiến trên Hacker News
  • Việc chọn dùng ClickHouse tại PostHog là một trong những quyết định tốt nhất. Nó cho phép mở rộng hiệu năng đồng thời xây dựng thêm nhiều sản phẩm trên cùng một tập dữ liệu

    • Chúng tôi đã dùng ClickHouse từ trước khi có tính năng JSON, và đã thiết lập quy trình chuyển các trường JSON thành cột vật lý dựa trên mẫu truy vấn các khóa trong JSON blob
    • Khi các cột vật lý được tạo ra, truy vấn sẽ được định tuyến tới các cột đó lúc chạy, giúp giảm mạnh mức sử dụng CPU và IO
    • Kiểu JSON mới của ClickHouse cải thiện hiệu năng bằng cách khiến máy tính phải làm ít việc hơn
    • Đội ngũ ClickHouse Inc. và cộng đồng phát triển rất nhanh, và tôi rất kỳ vọng vào hỗ trợ Parquet và Iceberg
  • Tôi tự hỏi liệu việc thêm kiểu dữ liệu vào JSON có còn giữ được tư cách là JSON hay không

    • Nếu trình phân tích JSON trong thư viện chuẩn không đọc được, tôi nghĩ dùng một cái tên như "CH-JSON" sẽ phù hợp hơn
    • Tôi vẫn chưa dùng thử ClickHouse, nhưng kết quả nghe rất ấn tượng
  • Thật tốt khi thấy tính năng này xuất hiện trong ClickHouse

    • Snowflake đã công bố một whitepaper nhắc đến tính năng này trước IPO, và âm thầm chuyển JSON thành các cột để cải thiện hiệu năng
  • Khi đánh giá ClickHouse, Apache Pinot cũng đáng để cân nhắc

    • ClickHouse được thiết kế cho cài đặt trên một máy đơn và còn thiếu hỗ trợ cụm
    • Pinot dễ mở rộng theo chiều ngang hơn, và nếu tận dụng star-tree index thì chênh lệch hiệu năng trong phân tích đa chiều là rất lớn
  • Tôi thấy hứng thú với dữ liệu thay đổi động

    • Hy vọng điều này có thể giải quyết các vấn đề cấu hình kiểu dữ liệu thường gặp khi lưu log trong Elasticsearch
  • Tôi đã chờ hỗ trợ JSON của ClickHouse từ lâu, và kiểu mới cùng các cột động sẽ đặc biệt hữu ích

  • ClickHouse là một công cụ tuyệt vời

    • Tôi dùng nó cho OLAP, và nó xử lý cơ sở dữ liệu 600 triệu hàng, 300GB mà không gặp vấn đề gì
    • Tôi kỳ vọng kiểu dữ liệu JSON mới sẽ tốt hơn cho các trường hợp sử dụng mà hiện tại tôi đang xử lý bằng nested tuple
  • Khi thử ClickHouse vài tuần trước, nó đặt tên tệp dựa trên tên cột, khiến hệ thống tệp phát sinh lỗi do tên tệp quá dài và có dấu gạch chéo

  • ClickHouse vẫn chưa được sử dụng đủ nhiều

    • Có nhận thức rằng 'postgres là tất cả', nhưng nếu bạn phải mở rộng vượt quá mức cần thiết thì nên cân nhắc ClickHouse
    • clickhouse-local rất xuất sắc trong việc xử lý CSV bằng SQL, và tôi cực kỳ khuyến nghị nó khi bạn đã chán Google Sheets hay Excel