Khung nhìn vật chất hóa (Materialized View)
1. Tổng quan
A. Định nghĩa
Khung nhìn vật chất hóa (Materialized View) là một khung nhìn được tính toán trước và lưu bền — nó lưu tập kết quả của truy vấn định nghĩa khung nhìn (SELECT) thành một bảng vật lý thực trên đĩa (precompute·persist) và đồng bộ với các bảng nguồn (bảng cơ sở) thông qua làm mới (refresh) mỗi khi nguồn thay đổi. Khác với khung nhìn thông thường (khung nhìn ảo) vốn tính lại mỗi lần được tham chiếu, khung nhìn vật chất hóa là một cấu trúc đánh đổi không gian-thời gian (space-time trade-off) điển hình: "tính trước kết quả và bỏ ra không gian để mua lấy thời gian."
B. Bối cảnh ra đời và sự cần thiết
Trong cơ sở dữ liệu quan hệ, khung nhìn (View) từ lâu được dùng để trừu tượng hóa các phép nối·tổng hợp·lọc phức tạp dưới một tên duy nhất, nâng cao khả năng tái sử dụng và bảo mật. Tuy nhiên khung nhìn truyền thống là đối tượng ảo chỉ lưu định nghĩa chứ không lưu dữ liệu, nên mỗi lần truy vấn khung nhìn thì các bảng nguồn lại được nối·tổng hợp lại. Nếu một bảng điều khiển (dashboard) lặp đi lặp lại ở mức phút một phép tổng hợp GROUP BY nhiều mối nối trên bảng sự kiện hàng trăm triệu dòng, thì cùng một phép tính nặng bị lặp vô tận và CPU·I/O bão hòa.
Vấn đề này đặc biệt rõ trong môi trường OLAP (phân tích)·kho dữ liệu. Truy vấn phân tích như "tổng doanh thu theo vùng của quý trước" thiên về đọc, và tần suất truy vấn (giây·phút) cao hơn nhiều so với chu kỳ thay đổi của nguồn (ngày·giờ). Nghĩa là tính lại cùng một kết quả mỗi lần là lãng phí rõ ràng. Khung nhìn vật chất hóa tính kết quả này một lần và lưu vật lý, nên các truy vấn sau được thay bằng việc quét đơn giản kết quả đã lưu. Khi nguồn thay đổi, khung nhìn phản ánh toàn bộ kết quả hoặc chỉ phần đã thay đổi (tăng tiến), nên có thể chọn một ngưỡng cũ (staleness) phù hợp với yêu cầu, nằm giữa "luôn mới" và "luôn nhanh."
Sự cần thiết này bắt nguồn từ việc hai bản chất của trừu tượng "khung nhìn" — tái sử dụng logic và hiệu năng vật lý — bị tách rời trong khung nhìn truyền thống. Khung nhìn truyền thống cung cấp tái sử dụng logic (trừu tượng hóa·bảo mật) nhưng phó mặc hiệu năng vật lý cho việc tính lại mỗi lần gọi. Khung nhìn vật chất hóa thêm vào đây một thực thể vật lý (kết quả đã lưu) để hợp nhất hai bản chất vào một đối tượng; đó là điểm dung hòa "giữ sự tiện lợi của khung nhìn nhưng loại bỏ việc tính toán lặp lại." Chính điểm này khiến khung nhìn vật chất hóa vượt trội so với thói quen cũ là tự tay dựng bảng tóm tắt và quản lý bằng trigger.
Hơn nữa, khung nhìn vật chất hóa vượt khỏi một bộ nhớ đệm đơn thuần ở chỗ nó tích hợp với bộ tối ưu hóa truy vấn, điều này phân biệt nó với bộ đệm ứng dụng. Các hệ thống lớn như Oracle·PostgreSQL·SQL Server (indexed view)·Snowflake·BigQuery tự động viết lại kế hoạch sao cho ngay cả khi người dùng truy vấn trực tiếp bảng nguồn, bộ tối ưu hóa vẫn phán đoán liệu một khung nhìn vật chất hóa có thể thỏa mãn truy vấn đó thay thế và đọc khung nhìn (Query Rewrite). Nhờ đó có thể hưởng lợi ích hiệu năng một cách trong suốt mà không sửa mã ứng dụng, đưa khung nhìn vật chất hóa thành cơ chế tăng tốc cốt lõi trong các kiến trúc báo cáo·BI quy mô lớn.
C. Đặc điểm
Bản chất của khung nhìn vật chất hóa phải được hiểu qua việc "lợi ích thu được từ lưu trữ" và "chi phí phát sinh từ lưu trữ" là hai mặt của một đồng xu. Vì kết quả được lưu vật lý nên truy vấn nhanh hơn, nhưng kết quả đã lưu không khớp với nguồn tức thời và chỉ hội tụ về mới nhất qua một thao tác riêng gọi là làm mới. Do đó áp dụng khung nhìn vật chất hóa đồng nghĩa với việc thiết kế "chấp nhận mức cũ bao nhiêu, với chi phí làm mới bao nhiêu." Các đặc điểm sau đều phái sinh từ bản chất này.
- Lưu trữ vật lý của kết quả: kết quả truy vấn được lưu thành bảng thực, nên có thể áp dụng thêm lập chỉ mục·phân mảnh.
- Đồng bộ trễ (eventually fresh): tính nhất quán với nguồn bị trễ đến thời điểm làm mới, và độ tươi được điều chỉnh bằng chiến lược làm mới.
- Tăng tốc trong suốt (query rewrite): bộ tối ưu hóa có thể tự động thay thế truy vấn nguồn bằng khung nhìn vật chất hóa.
- Có thể duy trì tăng tiến (incremental): fast refresh chỉ phản ánh delta giúp tối thiểu hóa chi phí làm mới.
- Chi phí lưu trữ dư thừa: vì kết quả được giữ riêng với nguồn, gánh nặng lưu trữ·làm mới tăng và thêm trách nhiệm quản lý nhất quán.
- Có thể tách theo mục đích: từ cùng một nguồn có thể dựng nhiều khung nhìn với độ tươi·độ hạt khác nhau, mỗi cái áp dụng chính sách làm mới riêng phù hợp với báo cáo·dashboard·phân tích khám phá.
2. Cấu trúc tổng thể của khung nhìn vật chất hóa
flowchart TB
subgraph SRC["Bảng cơ sở (nguồn)"]
B1["Sales (bảng sự kiện)"]
B2["Region (chiều)"]
end
MVLOG["Nhật ký MV (MV Log)<br/>ghi phần thay đổi (delta)"]
subgraph MV["Khung nhìn vật chất hóa (lưu vật lý)"]
MVT[("Tập kết quả đã lưu<br/>tổng doanh thu theo vùng")]
IDX["Chỉ mục/phân mảnh phụ"]
end
OPT["Bộ tối ưu hóa truy vấn<br/>(Query Rewrite)"]
USR["Truy vấn người dùng (SELECT)"]
B1 -->|"thay đổi (INSERT/UPDATE/DELETE)"| MVLOG
B2 --> MVLOG
MVLOG -->|"refresh (tăng tiến/toàn bộ)"| MVT
MVT --- IDX
USR --> OPT
OPT -->|"quét MV thay vì nguồn"| MVT
OPT -. "khi không viết lại được" .-> B1
Khung nhìn vật chất hóa rõ nhất khi hiểu qua bốn yếu tố logic. Thứ nhất, bảng cơ sở (base table) là nguồn mà truy vấn định nghĩa khung nhìn tham chiếu; thay đổi phát sinh ở đây là cội nguồn làm mất độ tươi của khung nhìn. Thứ hai, tập kết quả đã lưu là phân đoạn thực chứa các dòng thu được khi thực thi truy vấn khung nhìn; như một bảng thường, có thể áp dụng chỉ mục·phân mảnh·nén, tăng tốc truy vấn thêm. Thứ ba, nhật ký MV (Materialized View Log) là cấu trúc phụ ghi riêng phần thay đổi (delta) của bảng cơ sở để làm mới tăng tiến; chỉ khi có nó mới phản ánh được "chỉ các dòng đã đổi" mà không tính lại toàn bộ. Thứ tư, viết lại truy vấn của bộ tối ưu hóa chuyển hướng ngay cả truy vấn nguồn sang khung nhìn, cung cấp tăng tốc trong suốt.
Cốt lõi của cấu trúc này là sự tách biệt đường ghi và đường đọc. Thay đổi nguồn tích vào nhật ký (ghi), còn truy vấn đọc kết quả đã tính trước (đọc). Vì hai đường tách biệt, hiệu năng truy vấn được tách rời (decoupling) khỏi kích thước·độ phức tạp mối nối của bảng nguồn. Điều này cộng hưởng với tư tưởng CQRS (Tách biệt trách nhiệm Lệnh·Truy vấn) là tách mô hình đọc và ghi; khung nhìn vật chất hóa có thể xem là phương tiện cấu thành một "mô hình đọc chỉ-đọc" một cách khai báo bên trong DBMS. Tuy nhiên khác với CQRS vận hành hai mô hình một cách tường minh ở tầng ứng dụng, khung nhìn vật chất hóa để DBMS đảm nhận việc làm mới·nhất quán, nên gánh nặng vận hành thấp hơn.
Bảng dưới cho thấy sự khác biệt giữa khung nhìn thường·khung nhìn vật chất hóa·bộ đệm ứng dụng bắt nguồn từ đâu. Khung nhìn thường không lưu nên luôn mới nhưng chậm vì tính lại mỗi lần; khung nhìn vật chất hóa nhanh nhờ lưu trữ nhưng phát sinh độ trễ làm mới; còn bộ đệm ứng dụng nằm ngoài DBMS nên bộ tối ưu hóa không biết và không thể viết lại tự động.
| Phân loại | Khung nhìn (ảo) thường | Khung nhìn vật chất hóa | Bộ đệm ứng dụng |
|---|---|---|---|
| Lưu dữ liệu | Không (chỉ định nghĩa) | Lưu vật lý | Lưu ngoài (Redis v.v.) |
| Độ tươi | Luôn mới | Trễ đến thời điểm làm mới | Phụ thuộc hết hạn·vô hiệu hóa |
| Hiệu năng truy vấn | Tính lại mỗi lần (chậm) | Tính trước (nhanh) | Nhanh |
| Bộ tối ưu hóa nhận biết | Không áp dụng | Có thể viết lại tự động | Không thể (không trong suốt) |
| Trách nhiệm nhất quán | DBMS | DBMS (chính sách làm mới) | Ứng dụng |
3. Cơ chế làm mới (Refresh)
sequenceDiagram
participant App as Ứng dụng
participant Base as Bảng cơ sở
participant Log as Nhật ký MV (delta)
participant MV as Khung nhìn vật chất hóa
App->>Base: INSERT/UPDATE/DELETE
Base->>Log: nạp delta (khóa dòng·phép toán)
alt ON COMMIT (tăng tiến tức thời)
Base-->>MV: phản ánh delta khi commit (fast refresh)
else ON DEMAND (trễ)
App->>MV: gọi REFRESH
MV->>Log: đọc delta và áp dụng tăng tiến
Note over MV,Log: tính lại toàn bộ nếu không có delta hoặc tổng hợp phức tạp
end
App->>MV: truy vấn phân tích (SELECT)
MV-->>App: trả kết quả đã tính trước
Yếu tố quyết định phân chia giá trị và chi phí của khung nhìn vật chất hóa là chiến lược làm mới. Nó chia theo hai trục lớn — tính lại cái gì (toàn bộ vs tăng tiến) và làm khi nào (tức thời vs trễ).
Ở đây "cái gì" và "khi nào" là hai trục trực giao nên có thể kết hợp. Làm mới toàn bộ có thể chạy theo mẻ ban đêm (ON DEMAND), còn làm mới tăng tiến có thể gắn vào thời điểm commit (ON COMMIT). Người thiết kế chọn hai trục độc lập để chọn điểm phù hợp yêu cầu nghiệp vụ, như "toàn bộ+ban đêm", "tăng tiến+định kỳ", hay "tăng tiến+thời gian thực". Dưới đây ta xem lần lượt các lựa chọn trên từng trục.
A. Làm mới toàn bộ (Complete Refresh) thực thi lại từ đầu truy vấn định nghĩa khung nhìn và thay thế kết quả trọn gói. Nó đơn giản để hiện thực và áp dụng được cho mọi truy vấn, nhưng chi phí tăng tuyến tính theo kích thước nguồn. Chạy làm mới toàn bộ một phép tổng hợp nhiều mối nối trên bảng sự kiện hàng trăm triệu dòng mỗi giờ tự nó trở thành một mẻ nặng khác. Do đó làm mới toàn bộ nên giới hạn ở các trường hợp nguồn nhỏ, thay đổi toàn diện, hoặc tổng hợp phức tạp không thể tăng tiến.
B. Làm mới nhanh/tăng tiến (Fast/Incremental Refresh) chỉ phản ánh phần thay đổi (delta) tích trong nhật ký MV. Ví dụ trong 10 triệu dòng doanh thu, nếu 10.000 dòng được thêm trong một giờ qua, thì chỉ các nhóm tổng hợp bị 10.000 dòng đó tác động mới được cập nhật. Vì chi phí tỷ lệ với "lượng thay đổi" chứ không với "kích thước nguồn", nó tạo hiệu quả đột phá trên các bảng lớn có tỷ lệ thay đổi thấp. Tuy nhiên để tăng tiến thành lập, định nghĩa khung nhìn phải ở dạng duy trì tăng tiến được. Nói chung các phép tổng hợp cộng tính (additive) như SUM·COUNT dễ tăng tiến, nhưng AVG phải phân rã thành SUM/COUNT, MAX·MIN có thể cần tính lại khi có xóa, còn một phần DISTINCT·truy vấn con lồng·nối ngoài bị hạn chế. Thiết kế mà không biết các ràng buộc này sẽ sa vào bẫy "bật fast refresh nhưng thực tế thoái hóa thành làm mới toàn bộ."
C. Thời điểm làm mới (đồng bộ vs bất đồng bộ) định ra điểm cân bằng giữa độ tươi và gánh nặng ghi. ON COMMIT (đồng bộ) làm mới khung nhìn cùng lúc khi giao dịch nguồn commit, bảo đảm nhất quán gần thời gian thực, nhưng nó đặt chi phí làm mới lên giao dịch ghi, tăng độ trễ ghi OLTP. ON DEMAND (bất đồng bộ) làm mới định kỳ (ví dụ mỗi 5 phút·1 giờ) qua bộ lập lịch hoặc gọi thủ công, giữ đường ghi nhẹ, nhưng dữ liệu trở nên cũ (stale) tới mức một chu kỳ. Trong thực tiễn, thường định nghĩa trước độ trễ mà nghiệp vụ chấp nhận, như "dashboard chấp nhận trễ 5 phút", rồi đặt chu kỳ ON DEMAND tương ứng.
D. Khả dụng trong khi làm mới (đồng thời) cũng quan trọng trong vận hành. Làm mới toàn bộ truyền thống có vấn đề truy vấn bị chặn hoặc thấy kết quả rỗng trong khi khung nhìn bị dọn trống rồi nạp lại. Để giải quyết, PostgreSQL hỗ trợ làm mới không gián đoạn bằng REFRESH MATERIALIZED VIEW CONCURRENTLY (nó giữ khung nhìn hiện có ở trạng thái đọc được, dựng kết quả mới rồi thay thế; cần một chỉ mục duy nhất), còn Oracle điều chỉnh tính nguyên tử giao dịch bằng tùy chọn atomic_refresh. Trong dịch vụ 24×7, phải kiểm tra mô hình đồng thời sao cho bản thân việc làm mới không phá vỡ SLA truy vấn, và với khung nhìn lớn, kỹ thuật trao đổi phân mảnh (partition exchange) giới hạn phạm vi ảnh hưởng về một phân mảnh được dùng rộng rãi.
4. Viết lại truy vấn (Query Rewrite) và ứng dụng
Điểm mà khung nhìn vật chất hóa khác biệt dứt khoát với một bảng tóm tắt (summary table) thuần túy là viết lại truy vấn. Ngay cả khi người dùng ném ra SQL tổng hợp trực tiếp bảng sự kiện nguồn, bộ tối ưu hóa vẫn kiểm tra xem có tồn tại một khung nhìn vật chất hóa tương đương về mặt ngữ nghĩa và nếu có thì đổi kế hoạch thực thi để đọc khung nhìn thay vì nguồn. Ứng dụng không cần biết sự tồn tại của khung nhìn, và DBA có thể điều chỉnh hiệu năng mà không đổi mã chỉ bằng cách thêm·bớt khung nhìn ở nơi cần hiệu năng. Để viết lại thành lập, khung nhìn phải "bao hàm" truy vấn yêu cầu; chẳng hạn nếu có khung nhìn tổng hợp mức ngày thì truy vấn mức tháng có thể được viết lại thành cuộn lên (rollup) bằng cách GROUP BY lại khung nhìn đó. Ngược lại, nếu đòi mức chi tiết hơn thì không viết lại được và quay về nguồn.
Một tiền đề khác của viết lại là khả năng điều hướng tổng hợp (aggregate navigability). Một khung nhìn ở mức thô hơn không thể thỏa mãn truy vấn mức mịn hơn, nên độ hạt (granularity) của khung nhìn nên đặt ở mẫu số chung mịn nhất của các mẫu truy vấn dự kiến. Một khung nhìn mức ngày có thể phủ các truy vấn ngày·tuần·tháng·quý bằng cuộn lên, nhưng khi cần truy vấn theo khung giờ thì quay về nguồn. Do đó đặt bao nhiêu khung nhìn, ở độ hạt nào là một quyết định thiết kế dựa trên phân tích nhật ký truy vấn; đặt nhiều khung nhìn bừa bãi chỉ làm tăng chi phí làm mới·lưu trữ.
Tuy nhiên viết lại truy vấn kèm theo tiền đề bộ tối ưu hóa phải tin được quan hệ giữa khung nhìn và nguồn. Trong Oracle, tùy mức QUERY_REWRITE_INTEGRITY (ENFORCED·TRUSTED·STALE_TOLERATED), người ta điều chỉnh việc chỉ viết lại khi khóa ngoại·ràng buộc được xác thực, hay cho phép cả ràng buộc đã khai báo (RELY) hoặc khung nhìn hơi cũ. Viết lại sang một khung nhìn đã giảm độ tươi có thể trả về câu trả lời nhanh nhưng sai, nên quan trọng là thiết kế mức toàn vẹn viết lại và chu kỳ làm mới khung nhìn cùng nhau. Đây là lý do khung nhìn vật chất hóa phải được coi là "đối tượng nhất quán" đồng thời là "đối tượng hiệu năng".
Về mặt ứng dụng, khung nhìn vật chất hóa nổi bật ở ba lĩnh vực. Thứ nhất, tăng tốc tổng hợp OLAP. Dựng khung nhìn vật chất hóa cho các tóm tắt theo vùng·kỳ·sản phẩm thường dùng trong lược đồ sao của kho dữ liệu thường rút phản hồi dashboard từ hàng chục giây xuống hàng trăm mili giây. Thứ hai, sao chép dữ liệu từ xa·phân tán. Khi nguồn ở một DB khác, sao chép·làm mới định kỳ kết quả ở cục bộ bằng khung nhìn vật chất hóa đóng vai trò bản sao chỉ-đọc, giảm vòng lặp mạng và tải từ xa. Thứ ba, nối trước (pre-join). Các phép nối nhiều-nhiều nặng được giải trước và lưu lại, loại bỏ chi phí nối lặp lại.
5. So sánh loại hình và trường hợp áp dụng
Lựa chọn chiến lược làm mới thay đổi theo đặc tính nghiệp vụ. Bảng dưới sắp xếp các tổ hợp tiêu biểu và tình huống phù hợp; căn cứ của mỗi mục quy về hai trục "lượng thay đổi so với lượng truy vấn" và "độ trễ chấp nhận".
| Tổ hợp chiến lược | Độ tươi | Chi phí làm mới | Tình huống phù hợp |
|---|---|---|---|
| Toàn bộ + ON DEMAND (mẻ ban đêm) | Thấp (theo ngày) | Cao (toàn bộ) | Báo cáo theo ngày, tổng hợp phức tạp không tăng tiến được |
| Tăng tiến (fast) + ON DEMAND (5~15 phút) | Trung bình | Thấp (delta) | Dashboard BI gần thời gian thực |
| Tăng tiến (fast) + ON COMMIT | Cao (thời gian thực) | Cộng vào ghi | Tổng hợp nhỏ cần mới nhất·lượng ghi thấp |
Tiêu chí phán đoán lặp lại trong so sánh này quy về ba câu hỏi. (1) Dữ liệu thay đổi thường xuyên đến mức nào (tỷ lệ thay đổi)? (2) Chấp nhận dữ liệu cũ đến đâu (SLA độ tươi)? (3) Cùng một kết quả được truy vấn thường xuyên đến mức nào (tỷ lệ tái sử dụng)? Tỷ lệ thay đổi càng thấp, tỷ lệ tái sử dụng càng cao, và yêu cầu độ tươi càng lỏng thì lợi ích của khung nhìn vật chất hóa càng lớn; trong tình huống ngược lại thì khung nhìn thường hoặc chỉ mục hợp lý hơn. Chấm điểm các truy vấn ứng viên theo ba trục này để quyết định có đưa vào khung nhìn hay không sẽ tránh thiết kế quá mức.
Lấy một trường hợp cụ thể, giả sử dashboard phân tích cước của một nhà mạng viễn thông mất hơn 3 giờ trong mẻ ban đêm để làm mới toàn bộ một bảng sự kiện 200 triệu dòng. Đổi sang làm mới tăng tiến ở mức phân mảnh theo ngày + ON DEMAND chu kỳ 15 phút chỉ phản ánh lượng phát sinh mới trong ngày (khoảng 700.000 dòng, 0,35% tổng), nên làm mới rút xuống trong vài phút và độ tươi dashboard cải thiện từ một ngày xuống 15 phút. Mấu chốt là chi phí làm mới được đổi để tỷ lệ với 0,35% đã thay đổi chứ không với toàn bộ 200 triệu, và nguyên lý "tỷ lệ thay đổi càng thấp thì lợi ích của tăng tiến càng lớn" này vận hành như một quy luật chung của việc chọn chiến lược.
Trong các trường hợp tài chính, thường dùng cấu hình hỗn hợp trong đó các chỉ số mà tính nhất quán là tuyệt đối, như báo cáo tuân thủ quy định, được bảo đảm khớp thời gian thực qua tăng tiến ON COMMIT, còn các chỉ số chấp nhận độ trễ, như tổng hợp phục vụ khám phá tiếp thị, tiết kiệm tài nguyên bằng ON DEMAND theo giờ. Vì ngay cả cùng một dữ liệu cũng có nhu cầu độ tươi khác nhau tùy "dùng để làm gì", việc tách khung nhìn theo mục đích và áp dụng chính sách làm mới khác nhau là thiết kế thực tế. Trong các DW đám mây cũng vậy, khung nhìn vật chất hóa tự duy trì của Snowflake, MV tăng tiến của BigQuery, và REFRESH MATERIALIZED VIEW CONCURRENTLY (truy vấn không gián đoạn trong khi làm mới) của PostgreSQL khác nhau về đặc tính theo từng hiện thực, nên kiểm tra trước phạm vi hỗ trợ tăng tiến và mô hình đồng thời của nền tảng là điểm khởi đầu của thiết kế.
6. Chuyên sâu — Duy trì khung nhìn tăng tiến và mở rộng sang phân tích luồng
Gần đây công nghệ khung nhìn vật chất hóa tiến hóa theo hướng tăng tiến hóa một dải truy vấn rộng hơn dựa trên lý thuyết IVM (Incremental View Maintenance). Khác với fast refresh truyền thống vốn giới hạn ở tổng hợp·nối đơn giản, IVM vi phân đại số (differentiation) định nghĩa khung nhìn để tính lượng thay đổi mà kết quả khung nhìn nhận từ các phép chèn·xóa·cập nhật bất kỳ (ΔResult = f(ΔInput)). Tiện ích mở rộng pg_ivm của PostgreSQL và các cơ sở dữ liệu luồng như Materialize·RisingWave đã thương mại hóa cách tiếp cận này, cung cấp khung nhìn vật chất hóa thời gian thực (streaming materialized view) làm mới khung nhìn trong mili giây ngay khi nguồn thay đổi. Điều này định nghĩa lại khái niệm truyền thống "bảng tóm tắt làm mới định kỳ theo mẻ" thành "truy vấn liên tục (continuous query) cho thay đổi chảy qua và luôn giữ kết quả cập nhật."
IVM quan trọng vì nó nới rộng ranh giới của "truy vấn có thể tăng tiến". Trong khi fast refresh truyền thống chỉ xử lý các mẫu giới hạn như tổng hợp cộng tính·nối đơn giản, IVM định nghĩa quy tắc lan truyền thay đổi cho từng toán tử đại số quan hệ, nên các truy vấn phức hợp kết hợp nối·tổng hợp·lọc cũng được duy trì tăng tiến. Ví dụ, khi một dòng được thêm vào một bảng trong khung nhìn nối, chỉ delta của kết quả nối với phía kia được tính và cộng vào khung nhìn. Miễn là lượng thay đổi nhỏ, cách tiếp cận này đạt chi phí làm mới độc lập với kích thước nguồn, cho phép tổng hợp gần thời gian thực ngay cả trên các bảng hàng tỷ dòng. Tuy nhiên khi có xóa·cập nhật trộn vào, cần xử lý delta âm (retraction) khiến hiện thực phức tạp, và chi phí bộ nhớ·lưu trữ để duy trì trạng thái (state) vẫn là một đánh đổi.
Một xu hướng khác là tự động hóa trong kho dữ liệu·lakehouse. incremental model của dbt, Materialized View·Delta Live Tables của Databricks, và Dynamic Table của Snowflake để nền tảng tự động quản lý khả năng tăng tiến·chu kỳ làm mới·thứ tự phụ thuộc một khi người dùng chỉ khai báo truy vấn kết quả cuối và độ tươi mục tiêu (target lag). Nghĩa là trọng tâm đang dịch từ thời kỳ con người lập trình "làm mới thế nào (how)" sang chuyển đổi dữ liệu khai báo (declarative) chỉ khai báo "cái gì·tươi đến đâu (what·how fresh)". Thay đổi này, kết hợp với CDC (thu bắt dữ liệu thay đổi)·hàng đợi tin nhắn, đang nâng khung nhìn vật chất hóa thành một thành phần chuẩn của các đường ống phân tích thời gian thực, và từ góc nhìn Kỹ sư chuyên nghiệp nên đọc nó như một lát cắt của xu thế vĩ mô các kiến trúc lấy ETL theo mẻ làm trung tâm hội tụ về duy trì theo luồng·khai báo.
Mặt khác, cũng phải lưu ý rằng tự động hóa như vậy không phải thuốc chữa bách bệnh. Các nền tảng khai báo hứa một "độ tươi mục tiêu", nhưng để giữ lời hứa đó, bên trong chúng thực hiện tính tăng tiến thường xuyên hơn và duy trì trạng thái, nên chi phí tính toán tăng gần như tuyến tính với độ tươi. Trong môi trường tính phí đám mây, một "dashboard trông như thời gian thực" có thể lặng lẽ gây chi phí lớn, nên giám sát độ tươi-chi phí từ góc nhìn FinOps là thiết yếu. Rốt cuộc, công nghệ chỉ tự động hóa phần "thế nào"; phán đoán nghiệp vụ về "cần tươi đến mức nào" vẫn là trách nhiệm của người thiết kế.
7. Điểm cân nhắc và hàm ý
Khung nhìn vật chất hóa mạnh mẽ nhưng không phải "tăng tốc miễn phí", và phải thiết kế cùng các đánh đổi sau từ góc nhìn Kỹ sư chuyên nghiệp. Đặc biệt có nhiều trường hợp áp dụng chỉ chú tâm vào lợi ích hiệu năng rồi khổ sở với hậu quả chi phí làm mới·quản lý nhất quán·quản trị, nên cần thái độ định lượng mặt chi phí trước khi áp dụng.
- Thỏa thuận tường minh độ tươi so với chi phí: trước hết phải định nghĩa độ trễ (SLA) mà nghiệp vụ chấp nhận. Phân biệt các chỉ số thực sự cần thời gian thực với các chỉ số không cần, trộn ON COMMIT·ON DEMAND, và tránh thiết kế quá mức là đặt chu kỳ làm mới ngắn một cách mù quáng rồi tiêu hao tài nguyên. "Mọi thứ đều thời gian thực" thường bất hợp lý về mặt chi phí·độ trễ ghi.
- Xác minh trước khả năng tăng tiến: phải xác minh ở giai đoạn thiết kế liệu định nghĩa khung nhìn có đáp ứng yêu cầu fast refresh (tổng hợp cộng tính·nối đơn giản·nhật ký MV cần thiết) hay không. Nếu tăng tiến không thành lập thì nó lặng lẽ thoái hóa thành làm mới toàn bộ và mục tiêu hiệu năng sụp đổ. Phản ánh trước việc phân rã
AVG→SUM/COUNT, xử lý xóa choMAX/MIN, ràng buộcDISTINCT, v.v. - Chi phí lưu trữ·chỉ mục và độ phức tạp vận hành: vì khung nhìn vật chất hóa lưu kết quả dư thừa nên lưu trữ tăng, và các chỉ mục dựng trên khung nhìn được duy trì cùng nhau mỗi lần làm mới, thêm gánh nặng ghi. Khi số khung nhìn tăng, việc truy vết·quản trị truy vấn nào được viết lại sang khung nhìn nào trở nên khó, nên vận hành kèm danh mục khung nhìn·quy ước đặt tên·giám sát tỷ lệ sử dụng.
- Ranh giới nhất quán và so sánh với các giải pháp thay thế: vì khung nhìn vật chất hóa giả định "nhất quán cuối cùng", nó không phù hợp với xử lý giao dịch phải khớp nguồn tức thời. Khi đó, phải chọn bằng cách so sánh với các giải pháp như khung nhìn thường·chỉ mục bao phủ·columnstore·bộ đệm kết quả. Đặc biệt nếu mục tiêu là tăng tốc một truy vấn đơn thì chỉ mục có thể tốt hơn, nếu tăng tốc tổng hợp lặp lại thì khung nhìn vật chất hóa, còn nếu tăng tốc phân tích toàn diện thì khối OLAP·lưu trữ theo cột có thể phù hợp hơn.
- Giám sát và quản lý vòng đời: phải chỉ-số-hóa và quan sát liên tục thời gian làm mới·tỷ lệ thất bại·thời điểm làm mới cuối·tỷ lệ trúng viết lại theo từng khung nhìn. Một khung nhìn không được dùng là một món nợ chỉ tiêu hao chi phí làm mới, nên cần quản lý vòng đời mạnh dạn loại bỏ các khung nhìn có tỷ lệ sử dụng thấp.
- Triển vọng và công nghệ liên kết: với sự trưởng thành của IVM theo luồng·DW khai báo (Dynamic Table·DLT), khung nhìn vật chất hóa đang mở rộng vượt khỏi tóm tắt theo mẻ thành một thành phần hạng nhất của phân tích thời gian thực. Xem xét cùng thiết kế liên kết với CDC·hàng đợi tin nhắn·lakehouse cho phép dựng một kiến trúc phân tích nhất quán xuyên suốt mẻ·luồng.
Tài liệu tham khảo
- Oracle, "Database Data Warehousing Guide — Basic Materialized Views / Refresh", https://docs.oracle.com/en/database/oracle/oracle-database/19/dwhsg/basic-materialized-views.html
- PostgreSQL Documentation, "CREATE MATERIALIZED VIEW / REFRESH MATERIALIZED VIEW", https://www.postgresql.org/docs/current/sql-creatematerializedview.html
- Snowflake Documentation, "Working with Materialized Views", https://docs.snowflake.com/en/user-guide/views-materialized
- Google Cloud, "Introduction to materialized views (BigQuery)", https://cloud.google.com/bigquery/docs/materialized-views-intro
Tóm tắt một câu: Khung nhìn vật chất hóa là cấu trúc đánh đổi không gian-thời gian lưu vật lý kết quả truy vấn khung nhìn và đồng bộ bằng làm mới toàn bộ·tăng tiến; nó mở rộng từ tăng tốc OLAP trong suốt qua viết lại truy vấn đến phân tích thời gian thực dựa trên IVM theo luồng, và cốt lõi là thiết kế "độ tươi so với chi phí" theo SLA nghiệp vụ.