Điều chúng ta đang chứng kiến không chỉ là một trào lưu tính năng. Đây là một sự thay đổi mang tính cấu trúc trong cách hạ tầng dữ liệu hoạt động. Iceberg đang dần trở thành tiêu chuẩn mặc định để lưu trữ dữ liệu phân tích quy mô lớn — không phải vì nó thời thượng, mà vì cách tiếp cận hiện tại với các định dạng lưu trữ độc quyền không mở rộng hiệu quả trên nhiều hệ thống.
Tôi tin rằng mọi cơ sở dữ liệu hiện đại — dù là OLTP hay OLAP — cuối cùng cũng sẽ hỗ trợ Iceberg. Không phải vì nó "có thì tốt", mà vì nó sẽ là yêu cầu bắt buộc để tương thích và sở hữu dữ liệu lâu dài. Việc bị khóa chặt vào nhà cung cấp (vendor lock-in) đang dần trở nên không thể chấp nhận được.
Hãy để tôi giải thích vì sao.
Định dạng độc quyền vs Định dạng bảng mở
Các cơ sở dữ liệu truyền thống — như PostgreSQL, MySQL, v.v. — lưu trữ dữ liệu của chúng theo định dạng độc quyền. Định dạng đó được tối ưu riêng cho engine cụ thể và không thể được truy cập trực tiếp bởi công cụ khác. Ngay cả khi một công cụ như Trino có thể kết nối với Postgres, nó vẫn phải truy vấn thông qua chính Postgres, chứ không phải đọc trực tiếp từ lưu trữ. Bạn chỉ là một client.
Điều này vẫn ổn trong các hệ thống khép kín. Nhưng một khi bạn muốn phân tích dữ liệu trên nhiều hệ thống — hoặc dùng các engine khác nhau cho các loại công việc khác nhau — thì bạn sẽ gặp trở ngại. Việc di chuyển dữ liệu giữa các hệ thống đòi hỏi sao chép, kéo theo hàng loạt vấn đề: Sai khác schema, lỗi đồng bộ, dữ liệu cũ, cập nhật xung đột, và không có nguồn dữ liệu nào được coi là sự thật duy nhất (single source of truth).
Và rồi là chuyện bị khóa với nhà cung cấp. Một số vendor đưa ra mức giá rẻ hấp dẫn để bắt đầu, rồi tăng giá mạnh khi dữ liệu của bạn đã nằm gọn trong hệ thống của họ. Khi đó, chi phí hoặc sự phức tạp để di chuyển ra ngoài là quá lớn, và doanh nghiệp bị mắc kẹt.
Iceberg mở ra một lối thoát.
Iceberg tách biệt lưu trữ và tính toán
Apache Iceberg định nghĩa một định dạng bảng cho phép tách biệt cách dữ liệu được lưu trữ và cách dữ liệu được truy vấn. Bất kỳ engine nào hỗ trợ Iceberg — như Spark, Flink, Trino, DuckDB, Snowflake, RisingWave — đều có thể đọc và/hoặc ghi dữ liệu Iceberg trực tiếp.
Điều này thay đổi toàn bộ kiến trúc. Bạn không còn cần phải chuyển dữ liệu giữa các hệ thống nữa. Không cần xử lý lại hay chuyển đổi định dạng. Bạn có thể xử lý dữ liệu bằng một engine và truy vấn nó bằng engine khác.
Điều đó cũng đồng nghĩa với việc bạn có thể tránh việc gắn lưu trữ với một engine duy nhất. Thay vì buộc phải dùng một stack tích hợp dọc mà trong đó bạn bị ép dùng engine của nhà cung cấp, bạn có thể chọn công cụ phù hợp với từng tác vụ. Một định dạng, nhiều engine. Và nó hoạt động liền mạch.
Tương lai là hai định dạng song song (Dual-Format)
Tôi cho rằng kiến trúc lâu dài cho hầu hết cơ sở dữ liệu sẽ là hai định dạng:
- Một định dạng độc quyền, tối ưu cho hiệu năng nội bộ — truy cập độ trễ thấp, xử lý trong bộ nhớ, giao dịch nhanh, v.v.
- Một định dạng mở như Iceberg, cho khả năng tương tác — lưu trữ dài hạn, truy cập bên ngoài, và chia sẻ dữ liệu giữa các hệ thống.
Điều này không còn là lý thuyết. Nó đang diễn ra rồi:
- Snowflake đã hỗ trợ đọc và ghi Iceberg.
- Databricks thêm khả năng tương thích Iceberg thông qua Unity Catalog.
- Redshift và BigQuery cũng đang triển khai hỗ trợ.
Định dạng độc quyền vẫn có vai trò. Nếu bạn muốn tối đa hóa hiệu suất cho engine OLTP, bạn vẫn cần định dạng tích hợp chặt. Nhưng nếu dữ liệu chỉ sống trong một engine, nó không thể tái sử dụng. Không chia sẻ được. Không di chuyển được. Không xây dựng được pipeline liên hệ thống. Bạn bị khóa.
Iceberg giải quyết điều đó. Bạn có thể dùng định dạng nhanh cho nội bộ khi cần, và ghi thêm một bản sao dưới dạng Iceberg để chia sẻ ra ngoài. Theo thời gian, ngày càng nhiều hệ thống sẽ coi Iceberg là đại diện mặc định của dữ liệu bên ngoài.
Các giao thức mở luôn chiến thắng
Chúng ta đã từng thấy điều này trước đây:
- JDBC và ODBC chuẩn hóa việc truy cập cơ sở dữ liệu quan hệ
- S3 trở thành giao diện chuẩn cho object storage
- Wire protocol của PostgreSQL trở thành tiêu chuẩn cho nhiều CSDL mã nguồn mở
Giờ Iceberg đang làm điều tương tự cho table format.
Các giao thức mở chiến thắng vì chúng làm giảm rào cản. Chúng trao quyền cho người dùng. Chúng buộc nhà cung cấp phải cạnh tranh bằng hiệu suất và tính năng — thay vì dựa vào việc khóa người dùng. Và chúng giúp việc xây dựng hệ thống từ nhiều thành phần trở nên dễ dàng hơn, không còn phải lo liệu định dạng lưu trữ có thành nút thắt hay không.