Thuật toán tối ƣu phân tán của System R* là một mở rộng về chất của các kỹ thuật đã đƣợc phát triển cho bộ tối ƣu hoá trong môi trƣờng tập trung của System R*. Thuật toán sử dụng cách tiếp cận biên dịch, trong đó thực hiện việc tìm kiếm vét cạn tất cả các chiến lƣợc khác nhau để chọn ra đƣợc một chiến lƣợc với chi phí thấp nhất Mặc dù chi phí cho các dự đoán và liệt kê chiến lƣợc này là khá cao, nhƣng tổng chi phí của sự tìm kiếm vét cạn đƣợc đền bù lại khá nhanh nếu câu truy vấn đƣợc sử dụng thƣờng xuyên.
Nhiệm vụ biên dịch đƣợc trạm chủ điều phối, tại đó câu truy vấn đƣợc bắt đầu. Bộ tối ƣu hoá của trạm chủ chịu trách nhiệm đƣa ra các quyết định đối với
thứ tự các nối tại trạm, tạo ra các phƣơng pháp truy nhập cục bộ cho câu truy vấn. Hàm mục tiêu của tối ƣu System R* là tổng chi phí bao gồm các chi phí xử lý cục bộ và các chi phí truyền.
Thuật toán tối ưu hoá phân tán của System R* (R*-QOA)
INPUT : cây truy vấn QT
OUTPUT : chiến lƣợc có chi phí nhỏ nhất Strat
Begin
For mỗi quan hệ Ri QT do Begin
For mỗi đường truy cập APij tới Ri do Xác định cost(APij)
End-for
Best_APi APij với chi phí nhỏ nhất End-for
For mỗi thứ tự (Ri1, Ri2,…, Rin)với i =1,…,n! do Begin
Xây dựng chiến lược (…((best_APi1 Ri2) Ri3) … Rin) Tính chi phí của chiến lược
End-for
Strat chiến lược với chi phí nhỏ nhất
For mỗi trạm k có chứa quan hệ có mặt trong QT do Begin
LSk chiến lược cục bộ (strategy,k)
Send(LSk,site k) {mỗi chiến lược cục bộ được tối ưu hoá tại trạm k} End-for
Thuật toán này đƣợc diễn giải nhƣ sau: bộ tối ƣu hoá phải chọn thuật toán nối (vòng lặp lồng, hay nối trộn) thứ tự kết nối, đƣờng truy nhập vào mỗi đoạn (chẳng hạn chỉ mục, quét tuần tự…). Các quyết định này dựa trên số liệu thống kê, các công thức dùng để đánh giá kích thƣớc quan hệ trung gian và thông tin về đƣờng truy nhập. Hơn nữa, bộ tối ƣu còn phải chọn các trạm chứa các kết quả nối và phƣơng thức truyền dữ liệu giữa các trạm. Để kết nối hai quan hệ có thể có 3 trạm có thể đƣợc chọn: trạm chứa quan hệ thứ nhất, trạm chứa quan hệ thứ hai, hoặc một trạm thứ 3 (chứa kết quả nối để thực hiện phép toán tiếp theo). R* hỗ trợ hai phƣơng pháp truyền dữ liệu giữa các trạm là:
1. Chuyển toàn bộ (ship-whole). Quan hệ đƣợc chuyển đến trạm kết nối và đƣợc lƣu trong một quan hệ tạm thời trƣớc khi đƣợc kết nối.
2. Tìm về khi cần (fetch-as-needed). Quan hệ ngoài đƣợc quét tuần tự, với mỗi bộ, giá trị kết nối đƣợc gửi tới trạm của quan hệ trong, ở đó nó chọn các bộ có giá trị khớp với nó và chuyển đến trạm của quan hệ ngoài. Phƣơng pháp này tƣơng đƣơng với phép kết nối nửa của quan hệ trong với mỗi bộ của quan hệ ngoài.
Phƣơng pháp 1, dữ liệu truyền lớn, nhƣng ít thông báo hơn phƣơng pháp 2. Dựa trên quan sát trực quan ta thấy, khi quan hệ nhỏ thì phƣơng pháp 1 sẽ tốt hơn. Ngƣợc lại, nếu quan hệ lớn và phép kết nối có tính chọn lọc tốt (chỉ chọn đƣợc một số ít bộ phù hợp) thì phƣơng pháp 2 tốt hơn. R* không xét tất cả các tổ hợp có thể của các phƣơng pháp kết nối với các phƣơng án truyền vì một số trong chúng là vô ích.
Các chiến lƣợc sẽ đƣợc mô tả chi tiết với các công thức chi phí đơn giản hoá. Cho phép kết nối của một quan hệ ngoài R với quan hệ trong S trên thuộc tính A, chúng ta có bốn chiến lƣợc nối. Gọi:
LC là chi phí xử lý cục bộ
CC là chi phí truyền
Ký hiệu s là số lƣợng trung bình của các bộ của S khớp với một bộ của R.
Phương án 1
Truy xuất bộ của quan hệ ngoài Truyền đền trạm chứa quan hệ trong Nối với S khi chúng đến đó
Tổng chi phí = LC(truy xuất card(R) bộ của R) + CC(size(R))
+ LC( truy xuất s bộ của S)* card (R)
Phương án 2
Chuyển quan hệ trong tới trạm chứa quan hệ ngoài
Chúng phải đƣợc ghi vào quan hệ tạm thời T mà không kết nối ngay khi đến.
Tổng chi phí =LC(truy xuất card(S) bộ của S) + CC(size(S))
+ LC(lưu card(S) bộ trong T) + LC(truy xuất card(R) bộ của R) + LC(truy xuất s bộ của T)*card(R)
Phương án 3
Chuyển cả hai quan hệ trong và ngoài tới trạm thứ 3 và tính toán kết nối ở đó
Tổng chi phí = LC(truy xuất card(S) bộ của S) + CC(size(S))
+ LC(lưu card(S) bộ trong T) + LC(truy xuất card(R) bộ của R)
+ CC(size(R))
+ LC(truy xuất s bộ của T)*card(R)
Phương án 4
Với mỗi bộ thuộc R, giá trị thuộc tính kết nối đƣợc gửi tới trạm chứa S Sau đó s bộ phù hợp với giá trị đó đƣợc truy xuất và gửi tới trạm của R để đƣợc kết nối khi chúng đến
Tổng chi phí = LC(truy xuất card(R) bộ từ R) + CC(length(A)*card(R))
+ LC(truy xuất s bộ từ S)*card(R) + CC(length(S)*card(R))
Ví dụ 3.4:
Chúng ta hãy xét câu truy vấn chứa nối trên thuộc tính MSDA của quan hệ DUAN (quan hệ ngoài) với DUAN (quan hệ trong).
Với giả thiết rằng DUAN và PHANCONG đƣợc lƣu tại hai trạm khác nhau và trong quan hệ PHANCONG có một chỉ mục trên MSDA. Các chiến lƣợc khả thi cho truy vấn này là:
1. Chuyển toàn bộ DUAN đến trạm của PHANCONG. 2. Chuyển PHANCONG đến trạm của DUAN.
3. Tìm về các bộ PHANCONG khi cần cho mỗi bộ của DUAN. 4. Di chuyển PHANCONG và DUAN đến trạm thứ 3.
Nhận xét:
Nếu không có phép toán nào cần thực hiện sau nối thì với DUAN
PHANCONG chiến lƣợc 4 có chi phí cao nhất.
Nếu size(DUAN) lớn hơn nhiều so với size(PHANCONG) thì chiến lƣợc 2 dƣờng nhƣ là tốt nhất nếu chi phí xử lý cục bộ không quá cao so với chiến lƣợc 1 và 3. Lƣu ý rằng ở chiến lƣợc 1 và 3 thì chi phí xử lý cục bộ có thể tốt do có thể tận dụng đƣợc chỉ mục trên thuộc tính nối.
Về khái niệm, thuật toán trên có thể coi nhƣ một tìm kiếm vét cạn trong tất cả n! các khả năng hoán vị các thứ tự kết nối. Khi số quan hệ tham gia là lớn thì chi phí cho tối ƣu hoá cũng lớn.
Tuy nhiên bằng cách sử dụng các kỹ thuật quy hoạch động, thuật toán System R* làm giảm bớt đƣợc các lựa chọn chiến lƣợc không hiệu quả.