Để thực hiện thuật toán ta cần biết cụ thể những thông tin sau:
• Kích thước của từng chỉ số,
• Với mỗi bộ 3 (Query, View, Index), phí tổn của câu trả lời C(Q,V,Y) là bao nhiêu.
Ở trên ta đã đưa ra công thức (*) để tính C(Q,V,J). Vấn đề còn lại ở đây là cần xác định cụ thể kích thước của từng View và từng Index. Đây không phải là vấn đề đơn giản vì kích thước của chúng thường rất lớn.
3.4.2.1. Ước tính kích thước của mỗi View
Có nhiều cách xác định kích thước của View mà không cần thiết phải cụ thể cụ thể hóa tất cả các View. Ta có thể sử dụng phương pháp phân tích và lấy mẫu để xác định kích thước của View từ nhiều View khác mà chúng ta chỉ cần cụ thể hóa phần tử V1 lớn nhất (View chứa tất cả các chiều) trong các View. Với một View, nếu các thuộc tính nhóm lại mà độc lập tĩnh thì ta có thể xác định theo phương pháp giải tích theo kích thước của View. Ngược lại có thể dùng mẫu V1 để tính kích thước của các View khác. Kích thước của một View là số các giá trị khác nhau của các thuộc tính mà chúng được nhóm lại.
3.4.2.2. Ước tính kích thước của chỉ số Index
Cho trước kích thước của mỗi View, ta hãy tính kích thước của chỉ số Index tương ứng. Thông thường kích thước của View trong mô hình là số dòng trong View đó. Kích thước của Index (B-cây) là số các lá của B-cây theo cách đánh chỉ số Index. Mặt khác số các nút lá của B-cây cho một Index xấp xỉ số dòng của một View tương ứng. Vậy ta có kết luận: kích thước của một chỉ số Index trên View V cũng là kích thước của bản thân View V.
Ta hãy xét hai Index J1 = IA(V) và J2 = TB(V) đối với cùng một View V. Nếu B là tiền tố thực sự của A thì C(Q,V,J1) ≤ C(Q,V,J2) với mọi câu truy vấn Q.
Mặt khác, kích thước của J1 và J2 là cùng xấp xỉ với kích thước của một View theo cùng một độ chính xác nên ta có thể bỏ J2 mà chỉ xét J1. Như vậy là với từng View, ta chỉ cần chọn chỉ số dài nhất để xử lý, đó là những chỉ số mà
các thuộc tính khóa tìm kiếm của nó không phải là tiền tố thực sự của các thuộc tính tìm kiếm của các Index khác trong cùng một View.
Nếu V là View (C) thì tập các chỉ số Index sẽ là {ID(V) ⏐D là một hoán vị của C}.
3.4.2.3. Xác định bài toán
Như ở trên đã nêu, nhiệm vụ của ta là xây dựng các thuật toán để chọn các View và Index cụ thể để trả lời cho những câu truy vấn đối với một Data Cube cho trước. Ta có thể phát biểu một cách không hình thức: cho trước một tập các View, mỗi View lại xác định một tập các Index và một tập các câu truy vấn mà hệ thống cần phải trả lời. Mục đích của ta là chọn View và Index trong số đó để có được câu trả lời cho các câu truy vấn với phí tổn thấp nhất với một điều kiện ràng buộc là tập các View và tập các Index không chiếm nhiều không gian hơn một không gian cho trước S, đây là bài toán NP_đầy_ đủ. Do vậy để giải quyết được bài toán trên, ta phải xây dựng những thuật toán có tính Heuristic, nhưng phải đảm bảo thuật toán thực hiện hiệu quả.
Trước tiên chúng ta tiến hành hình thức hóa bài toán nêu trên. Xét đồ thị lưỡng phân, G = (V ∪ Q, E) được gọi là đồ thị câu truy vấn - khung nhìn (Query - View Graph), V là tập các View còn Q chứa các câu truy vấn. Với mỗi vi∈ V xác định tương ứng một bộ (Si, Ii) trong đó Si là không gian mà vi chiếm và Ii là tập các chỉ số trên vi.
Ký hiệu Iik là chỉ số thứ k của vi.
• Với mỗi qi∈ Q xác định tương ứng phí tổn Ti trả lời cho câu truy vấn qi.
• Mỗi cạnh (qi, vj) có nhãn được gán tương ứng là (k, tijk), trong đó tijk là phí tổn câu trả lời cho câu truy vấn qi sử dụng View vj và chỉ số thứ k của nó. Khi k = 0, tijk là phí tổn của câu trả lời cho qi mà chỉ sử dụng vj. Bài toán: Cho tập các View V và tập các câu hỏi Q, cần xác định M ⊆ V, tập các View và các chỉ số cụ thể sao cho không gian mà các View và các chỉ
số đó chiếm không vượt quá S (không gian giới hạn) đồng thời với cách chọn M cũng đảm bảo được cực tiểu hóa phí tổn toàn bộ để có được câu trả lời cho câu truy vấn Q từ một trong các View của M.
Nghĩa là ta cần cực tiểu hóa đại lượng sau sao cho tổng không gian mà các cấu trúc được lựa chọn từ M nhỏ hơn S:
|Q|