Aggregate trong một OLAP cube
Các cube OLAP được thiết kế nhằm tối ưu hóa khả năng trích xuất và tổng hợp thông tin trên những lượng dữ liệu lớn và trên nhiều chiều khác nhau. Nói như vậy để phân biệt với các database OLTP vốn ưu tiên tốc độ xử lý giao dịch và tiết kiệm không gian lưu trữ.
Để phục vụ được mục tiêu nói trên, một trong những giải pháp các OLAP engine hay dùng là lưu lại những cái aggregates (tôi gọi là những tổng con) vào những bảng phụ, điều này giúp cho quá trình tìm kiếm tính toán gọn hơn nhưng phải đánh đổi bằng kích thước DB lớn hơn.
(ặc, kinh viện quá, đổi tone thôi)
Này nhé giả dụ bạn đã xây dựng được 1 datamart chứa table Invoice có khoảng vài triệu rows với các fields Invoice_no, Customer_name, Salesman_name, Country và Invoice_amount. Sếp_Nhỏ_Bán_Hàng muốn biết mỗi nước bán được bao nhiêu hàng, tính theo từng khách hàng và nhân viên bán hàng
Để vừa lòng Sếp_Nhỏ_Bán_Hàng bạn sẽ query như sau
SELECT sum(Invoice_amount) AS tien_la_bac, Country, Customer_name, Salesman_name
FROM invoice
GROUP BY Country, Customer_name, Salesman_name
(tạm gọi Qry1)
Đến phiên Sếp_lớn_bán_hàng, vốn là người ít quan tâm đến tiểu tiết, sẽ hỏi bạn tổng doanh thu của mỗi khách hàng ở mỗi nước. Quá dễ, bạn sẽ query:
SELECT sum(Invoice_amount) AS tien_la_bac, Country, Customer_name,
FROM invoice
GROUP BY Country, Customer_name
(tạm gọi Qry2)
Cuối cùng là sếp_tổng, chỉ cần biết thị trường nào là thị trường lớn nhất. Không khó, nên bạn làm luôn:
SELECT sum(Invoice_amount) AS tien_la_bac, Country
FROM invoice
GROUP BY Country
ORDER BY 1 DESC
(tạm gọi Qry3)
Sự việc sẽ tạm ổn, nếu không có thêm một chú Business Analyst suốt ngày vặn vẹo mớ dữ liệu trên hòng tìm ra cái thông tin gì đó. Hắn ta chạy mỗi query trên vài lần trong một phút, lại còn filter này nọ, hành hạ cái DB server của bạn đến xót cả ruột. Đã thế hắn lại còn than khóc là cái máy nó chạy chậm, rõ là đồ bợm !
Vì ghét hắn quá, bạn sẽ build cho hắn một cái OLAP cube có 3 chiều (hình dưới) giúp hắn có thể tự mình lấy được thông tin, hơn nữa lại có thể xoay trở vặn vẹo kiểu gì tùy thích trong chớp mắt khiến hắn sướng mê mẩn và bớt làm phiền bạn khi đang đọc Ỷ thiên đồ long ký hoặc đang viết truyện ngắn. Bí mật của cube này là nó đã lưu sẵn kết quả của 3 queries trên vào những bảng tạm ở đâu đó, đến khi thằng bợm kia hỏi thì nó đã sẵn sàng trả ra kết quả thay vì phải tính toán lại trên mấy triệu records.

… bây giờ thì bạn có thể thoải mái đọc tiếp Ỷ thiên đồ long ký, nhưng trước tiên hãy dành 5 phút kiểm tra xem cái cube mới tạo nó tốn hết bao nhiêu chỗ trên HDD nhé!







chipheo:
Các từ viết tắt không thống nhất nên khó hiểu cho n00b

OLAP, OLTP, DB ~ tiếng Anh
CSDL ~ tiếng Việt => nên đổi hết lại là DB cho máu
http://en.wikipedia.org/wiki/OLAP
http://en.wikipedia.org/wiki/OLTP
Chưa có từ CSDL trong Wikipedia
nó là Cơ Sở Dữ Liệu 
19 September 2006, 10:31 amerpnow:
Thanks bác em chữa lại rồi ạ!
19 September 2006, 11:03 am