Greenplum Database Bài học 18: Polymorphic Storage: Kết hợp Hot Data (Heap/SSD) và Cold Data (AOCO/Nén cao) trên cùng một bảng
Qua các bài học từ 13 đến 17, chúng ta đã khám phá các mô hình lưu trữ đa dạng trong Greenplum: từ Heap Tables linh hoạt cho OLTP, Append-Optimized (AO) nén cao cho OLAP, đến Partitioning cắt nhỏ dữ liệu theo thời gian. Nhưng câu hỏi đặt ra là: Tại sao chúng ta phải "đóng khung" toàn bộ một bảng vào một mô hình lưu trữ duy nhất?
Trong thực tế vận hành hệ thống Data Warehouse, dữ liệu có đặc tính thay đổi theo thời gian:
-
Dữ liệu mới sinh ra (Hot Data - Dữ liệu nóng): Cần ghi nhanh, sửa đổi linh hoạt, phục vụ các báo cáo real-time hàng ngày.
-
Dữ liệu cũ từ vài tháng trước (Warm / Cold Data - Dữ liệu lạnh): Chỉ dùng để đọc phân tích lịch sử, không bao giờ sửa đổi, cần tối ưu hóa dung lượng đĩa tối đa.
Để giải quyết bài toán này, Greenplum cung cấp một tính năng kiến trúc cực kỳ cao cấp gọi là Polymorphic Storage (Lưu trữ đa hình). Trong bài học này, chúng ta sẽ tìm hiểu cách kết hợp linh hoạt các mô hình lưu trữ khác nhau cho từng phân vùng ngay trên cùng một bảng duy nhất.
1. Polymorphic Storage là gì?
Polymorphic Storage là khả năng cho phép mỗi phân vùng (Partition) bên trong một bảng phân vùng lớn được phép sử dụng một phương thức lưu trữ vật lý (Storage Model) hoàn toàn khác nhau.
┌────────────────────────────────────────────────────────────────────────┐
│ POLYMORPHIC STORAGE ARCHITECTURE │
└───────────────────────────────────┬────────────────────────────────────┘
│
[ Bảng Gốc: fact_orders ]
│
┌──────────────────────────┴──────────────────────────┐
▼ ▼
[ Phân vùng Tháng hiện tại: 2026-10 ] [ Phân vùng Lịch sử: 2024 về trước ]
• Mô hình: Heap Tables / AO-Row • Mô hình: AOCO (Column-Oriented)
• Nén: Không nén hoặc nén nhẹ • Nén: ZSTD cấp độ cao (Compression Level 9)
• Tối ưu: Ghi nhanh, cập nhật linh hoạt • Tối ưu: Đọc tổng hợp cực lớn, tiết kiệm đĩa
Tại sao tính năng này lại mang tính cách mạng?
-
Phân vùng dữ liệu nóng (Tháng hiện tại): Bạn có thể cấu hình lưu trữ dưới dạng Heap Table hoặc AO-Row kết hợp ổ cứng SSD tốc độ cao, cho phép các tiến trình ETL nạp dữ liệu và xử lý các bản ghi mới phát sinh cực kỳ mượt mà.
-
Phân vùng dữ liệu lạnh (Các năm trước): Khi tháng đó đã qua đi và khóa sổ, bạn có thể tự động chuyển đổi cấu trúc của riêng phân vùng đó sang dạng AOCO (Column-Oriented) kết hợp thuật toán nén sâu ZSTD mức cao. Dung lượng lưu trữ giảm đi hàng chục lần mà không làm ảnh hưởng đến cấu trúc bảng tổng thể.
2. Cú pháp thực chiến: Thiết lập Polymorphic Storage cho bảng Phân vùng
Trong Greenplum, bạn hoàn toàn có thể chỉ định định dạng lưu trữ riêng cho từng phân vùng ngay từ khi khởi tạo bảng hoặc thay đổi chúng thông qua lệnh ALTER TABLE.
Cách 1: Định nghĩa ngay từ khi khởi tạo bảng
SQL
CREATE TABLE fact_customer_logs (
log_id BIGINT,
customer_id BIGINT,
action_type VARCHAR(50),
log_data TEXT,
created_at TIMESTAMP
)
DISTRIBUTED BY (customer_id)
PARTITION BY RANGE (created_at)
(
-- Phân vùng tháng hiện tại (Hot Data): Dùng AO Row (Ghi nhanh, dễ xử lý)
START (DATE '2026-10-01') END (DATE '2026-11-01')
WITH (appendoptimized=true, orientation=row),
-- Phân vùng dữ liệu cũ (Cold Data): Dùng AOCO kết hợp nén ZSTD siêu cao
START (DATE '2026-01-01') END (DATE '2026-10-01') EVERY (INTERVAL '1 month')
WITH (appendoptimized=true, orientation=column, compresstype=zstd, compressionlevel=7)
);
Cách 2: Chuyển đổi linh hoạt phân vùng cũ sang Cold Storage (ALTER TABLE)
Khi một phân vùng dữ liệu nóng chuyển sang trạng thái dữ liệu lạnh, DBA không cần phải viết script phức tạp để copy dữ liệu, mà chỉ cần chạy lệnh ALTER TABLE ... SET ACCESS METHOD hoặc dùng kỹ thuật chuyển đổi phân vùng:
SQL
-- Chuyển đổi định dạng lưu trữ của một phân vùng cũ sang Columnar + ZSTD
ALTER TABLE fact_customer_logs
ALTER PARTITION FOR (DATE '2026-01-01')
SET WITH (appendoptimized=true, orientation=column, compresstype=zstd, compressionlevel=9);
3. Lợi ích vượt trội của Polymorphic Storage trong Enterprise Data Warehouse
-
Tối ưu hóa chi phí phần cứng (Tiered Storage): Bạn có thể bố trí dữ liệu nóng nằm trên các ổ cứng NVMe SSD đắt đỏ để lấy tốc độ, trong khi dữ liệu lạnh được nén tối đa và đẩy xuống các tầng lưu trữ dung lượng lớn giá rẻ (Standard HDD hoặc Cloud Object Storage qua PXF).
-
Cân bằng hoàn hảo giữa tốc độ Ghi (Write) và Đọc (Read): Giải quyết triệt để mâu thuẫn muôn thuở: ETL cần ghi nhanh (thích hợp Row/Heap), còn báo cáo BI cần đọc nhanh theo cột (thích hợp AOCO).
-
Trong suốt với tầng ứng dụng (Transparent to Application): Các nhà phát triển phần mềm hay các kỹ sư viết câu truy vấn SQL hoàn toàn không cần quan tâm phân vùng nào đang dùng Heap hay phân vùng nào đang dùng AOCO. Họ chỉ cần gọi
SELECT * FROM fact_customer_logs WHERE created_at ..., Greenplum sẽ tự động điều phối cách đọc dữ liệu tối ưu nhất từ từng phân vùng vật lý khác nhau.
Tóm tắt Bài học 18
-
Polymorphic Storage cho phép mỗi phân vùng trong một bảng lớn sử dụng một mô hình lưu trữ vật lý hoàn toàn khác nhau (Heap, AO-Row, AOCO kết hợp các cấp độ nén khác nhau).
-
Giúp tối ưu hóa vòng đời dữ liệu: Dữ liệu nóng (Hot Data) ưu tiên tốc độ ghi/sửa, trong khi dữ liệu lạnh (Cold Data) được nén tối đa để tiết kiệm không gian đĩa.
-
Mang lại giải pháp lưu trữ phân tầng hiệu quả, tiết kiệm chi phí hạ tầng phần cứng cho các hệ thống Data Warehouse quy mô lớn.
Chúc mừng bạn đã hoàn thành xuất sắc Phần 2: Thiết kế Bảng, Lưu trữ & Phân phối Dữ liệu (từ Bài 9 đến Bài 18)!
Ở học phần tiếp theo — Phần 3: Nạp dữ liệu tốc độ cao & Tích hợp Hệ sinh thái (từ Bài 19 đến Bài 26), chúng ta sẽ bước sang kỹ thuật nạp dữ liệu quy mô lớn:
-
Tại sao lệnh
INSERT INTOtruyền thống là kẻ thù của hiệu năng trong MPP? -
Cách sử dụng
gpfdistvàExternal Tablesđể nạp hàng Terabyte dữ liệu vào Greenplum chỉ trong vài phút.
All Rights Reserved