5. Các kết quả dự kiến đạt đƣợc
3.4.3. Các thuật toán tối ưu hoá câu truy vấn phân tán
Phần này minh hoạ cách sử dụng của các kỹ thuật đã trình bày cho bốn thuật toán tiêu biểu cho những lớp khác nhau của thuật toán tối ưu hoá câu truy vấn phân tán: Thuật toán rút gọn của INGRES phân tán, thuật toán System R*, thuật toán SDD -1 và thuật toán AYH (Apers, Hevner, and Yao). Sự khác nhau giữa chúng có thể tóm tắt như sau:
- INGRES phân tán: tối ưu hoá thời gian động, System R, SDD-1. AYH: tối ưu hoá thời gian tĩnh.
- Hàm mục tiêu của SDD-1 và R*: tối thiểu hoá tổng chi phí, INGRES phân tán và AYH: tối thiểu thời gian trả lời và tổng chi phí.
- Các thành phần tối ưu của hàm chi phí, SDD-1: kích thước thông báo, AYH: kích thước thông báo và số thông báo; System R*: kích thước thông báo, số thông báo và chi phí I/O và CPU; INGRES phân tán: kích thước thông báo và chi phí I/O + CPU.
- Kiểu mạng, SDD-1 và AHY: mạng diện rộng điểm tới điểm, INGRES phân tán và R*: mạng cục bộ và diện rộng.
- SDD_1 và AHY sử dụng các phép nửa kết nối như một kỹ thuật tối ưu hoá câu truy vấn, INGRES phân tán và R* thực hiện kết nối tương tự các giải thuật tối ưu hoá câu truy vấn tập trung INGRES và System R:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
+ INGRES phân tán: lực lượng của quan hệ.
+ R*: lực lượng của quan hệ, số các giá trị duy nhất trên thuộc tính SDD-1: lực lượng của quan hệ, hệ số chọn kết nối, kích thước của phép chiếu trên mỗi thộc tính kết nối, kích thước thuộc tính và kích thước bộ dữ liệu.
+ AHY: lực lượng quan hệ, hệ số chọn kết nối, kích thước thuộc tính và kích thước bộ dữ liệu.
- INGRES phân tán có thể sử dụng các đoạn, còn R*, SDD-1, AHY không sử dụng.
3.4.3.1 Thuật toán INGRES phân tán
Thuật toán tối ưu hoá câu truy vấn phân tán của INGRES phân tán bắt nguồn từ thuật toán INGRES tập trung. Hàm mục tiêu của thuật toán là tối thiểu tổng chi phí và thời gian trả lời, nhưng hai mục tiêu này đối lập nhau (tăng chi phí truyền thông, có thể giảm bớt thời gian trả lời) nên hai hàm mục tiêu có trọng số lớn hơn cho mục tiêu này hay mục tiêu kia. Thuật toán tối ưu hoá câu truy vấn này bỏ qua chi phí truyền dữ liệu tới trạm kết quả. Thuật toán sử dụng các phân đoạn ngang và xét cả hai kiểu mạng (mạng cục bộ và mạng diện rộng).
Đầu vào của thuật toán xử lý câu truy vấn là một câu truy vấn viết trong phép tính quan hệ bộ (trong dạng chuẩn hội) và thông tin lược đồ (kiểu mạng, vị trí và kích thước của mỗi đoạn). Thuật toán này được thực hiện tại trạm ở đó câu truy vấn được bắt đầu, gọi là trạm chủ (master site), thuật toán có tên D- INGRES-QOA[7].
Thuật toán: D-INGRES-QOA
Input: MVQ: Truy vấn đa biến với n biến
Output: output: kết quả của truy vấn đa biến cuối cùng BEGIN
For mỗi OVQi có thể tách ra in MVQ do {chạy tất cả các truy vấn một biến}
Run(OVQi); (1)
Endfor
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
{thay thế MVQ bởi n truy vấn không thể rút gọn} (2)
While n 0 do {n- số truy vấn không thể rút gọn} (3)
Begin
{Chọn truy vấn không thể rút gọn liên quan đến các đoạn nhỏ nhất}
MVQ’ select_query(MVQ’_list); (3.1) {Xác định các đoạn để truyền và trạm xử lý MVQ‟}
Fragment-site-list SELECT_STRATEGY(MVQ’); (3.2) {truyền các đoạn đã chọn tới các trạm đã chọn}
For mỗi cặp (F,S) trong Fragment-site-list do (3.3)
Chuyển đoạn F tới trạm S;
End-for
Run(MVQ’);
n n-1; (3.4)
End-while {đầu ra của thuật toán là kết quả của MVQ‟ cuối cùng} End. (D-INGRES-QOA)
Bước 1: Xử lý địa phương tất cả các truy vấn một biến (phép chọn và phép chiếu).
Bước 2: Thuật toán thu gọn được áp dụng cho truy vấn ban đầu, tách các truy vấn không thể rút gọn và các truy vấn một biến ra. Bỏ qua các truy vấn một biến vì đã xử lý ở bước 1
Bước 3: Áp dụng cho các truy vấn không thể rút gọn.
Bước 3.1: Chọn các truy vấn chưa được xử lý và liên quan đến các đoạn nhỏ hơn.
Bước 3.2: Chọn chiến lược tốt nhất để xử lý truy vấn MVQ‟ (truy vấn không thể rút gọn và có ít nhất hai biến). Chiến lược này được mô tả bởi một danh sách các cặp (F, S), trong đó F là một đoạn để truyền tới trạm xử lý S.
Bước 3.3: Truyền tất cả các đoạn tới trạm xử lý chúng.
Bước 3.4: Thực hiện MVQ‟. Nếu có các truy vấn con còn lại, thuật toán quay lại bước 3 và thực hiện bước lặp tiếp theo, ngược lại thuật toán kết thúc.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Đặc điểm của thuật toán INGRES phân tán là tìm kiếm trong không gian lời giải có giới hạn, trong đó một quyết định tối ưu hoá được thực hiện ở mỗi bước với kết quả của nó trên tối ưu hoá tổng thể. Tối ưu hoá câu truy vấn động có lợi vì kích thước chính xác của kết quả trung gian được biết.
3.4.3.2 Thuật toán R*
Thuật toán tối ưu hoá câu truy vấn phân tán của R* là một sự mở rộng của các kỹ thuật đã phát triển cho bộ tối ưu System R, vì vậy 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 một chiến lược với chi phí ít nhất. Mặc dù, dự đoán và liệt kê các chiến lược này là đắt, tổng chi phí của sự tìm kiếm vét cạn được bù trừ một cách nhanh chóng nếu câu truy vấn được thực hiện thường xuyên. Thuật toán xử lý câu truy vấn R* chỉ giải quyết các quan hệ như các đơn vị cơ bản. Biên dịch câu truy vấn là một nhiệm vụ phân tán trong R*, được phối hợp bởi trạm chủ, tại đó câu truy vấn được bắt đầu. Bộ tối ưu của trạm chủ thực hiện tất cả các quyết định đối với trạm khác, như lựa chọn các trạm thực hiện, các phân đoạn và phương pháp truyền dữ liệu. Các trạm vệ tinh là các trạm khác có các quan hệ liên quan trong câu truy vấn, thực hiện các quyết định địa phương (như sắp thứ tự các phép kết nối tại một trạm) và tạo ra các phương án truy nhập địa phương cho câu truy vấn. Hàm mục tiêu của bộ tối ưu System R* là hàm tổng chi phí bao gồm các chi phí xử lý địa phương và truyền thông.
Đầu vào của thuật toán là câu truy vấn đã được định vị biểu diễn bởi cây đại số quan hệ, định vị của các quan hệ và những số liệu thống kê của chúng. Đầu ra là một chiến lược có chi phí cực tiểu. Thuật toán được mô tả bởi thủ tục R*-QOA sau [7]:
Thuật toán: R*-QOA
input: QT: Cây truy vấn
output: strat: Chiến lược chi phí tối thiểu BEGIN
For mỗi quan hệ RiQT do begin
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
for mỗi đường truy nhập APij to Ri do Xác định cost(APij);
endfor
best_APi APij với chi phí tối thiểu ; endfor
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 toán chi phí của chiến lược ;
endfor
strat chiến lược với chi phí tối thiểu ;
For mỗi trạm k chứa một quan hệ liên quan 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
end. {R*-QOA}
Thuật toán này được diễn giải như sau: Bộ tối ưu hoá phải chọn thứ tự kết nối, đường truy nhập vào mỗi đoạn thẳng (chẳng hạn chỉ mục nhóm, quét tuần tự, …). Các quyết định này dựa trên các thống kê và thông tin đường truy nhập. Hơn nữa, bộ tối ưu phải chọn các trạm chứa các kết quả kết nối và phương thức truyền dữ liệu giữa các trạm chứa quan hệ thứ hai, hoặc trạm thứ ba chứa kết quả kết nối. Trong R*, hai phương pháp được hỗ trợ cho việc truyền dữ liệu trên các trạm là:
1. Chuyển toàn bộ: Quan hệ vào được chuyển tới 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: 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, chọn các bộ trong kết nối được với giá trị đó và gửi các bộ đã chọn tới trạm của quan hệ ngoài. Phương pháp này tương đương với phép nửa kết nối của quan hệ trong với mỗi bộ của quan hệ ngoài.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Lợi ích của hai phương pháp này là rõ ràng. Với phương pháp 1, dữ liệu truyền lớn hơn nhưng ít thông báo hơn phương pháp hai. Bằng trực giác, chuyển toàn bộ các quan hệ là tốt khi chúng nhỏ. 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ỉ một số ít các bộ phù hợp), các bộ thích hợp nên được tìm về khi cầ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 phương pháp truyền vì một số trong chúng là vô ích.
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, có bốn chiến lược kết nối. Gọi LC là chi phí xử lý địa phương, CC là chi phí truyền thông, s là số trung bình các bộ của S hợp với một bộ của R:
Chiến lược 1: Chuyển quan hệ ngoài tới trạm của quan hệ trong. Trường hợp này các bộ ngoài có thể được kết nối khi chúng đến, vì vậy ta có:
Total_cost = LC(gọi card(R) bộ từ R)
+ CC(size(R)) + LC(gọi s bộ từ S)*card(R)
Chiến lược 2: Chuyển quan hệ trong tới trạm của quan hệ ngoài. Trường hợp này, các bộ trong không thể kết nối khi chúng đến, và chúng cần được lưu trong một quan hệ T tạm thời. Vì vậy ta có:
Total_cost = LC(gọi card(S) bộ từ S) + CC(size(S))
+ LC(lưu card(S bộ trong T) + LC(gọi card(R) bộ từ R) + LC(gọi s bộ từ T)*card(R)
Chiến lược 3: Tìm các bộ của quan hệ trong khi cần đối với mỗi bộ của quan hệ ngoài. Trường hợp này, với mỗi bộ trong R, giá trị thuộc tính kết nối được gửi tới trạm của S. Sau đó bộ từ S phù hợp với giá trị đó được gọi ra và gửi tới trạm của R để được kết nối khi chúng đến. Vì vậy ta có:
Total_cost = LC(gọi card(R) bộ từ R) + CC(length(A))*card(R) + LC(gọi s bộ từ S)*card(R)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
+ CC(s*length(S))*card(R)
Chiến lược 4: Chuyển cả hai quan hệ tới trạm thứ ba và tính toán kết nối ở đó. Trường hợp này quan hệ trong trước tiên được chuyển tới trạm thứ 3 và được lưu trong một quan hệ tạm thời T. Sau đó quan hệ ngoài được chuyển đến trạm thứ 3 và các bộ của nó được kết nối với T khi chúng đến. Vì vậy ta có:
Total_cost = LC(gọi card(S) bộ từ S) + CC(size(S))
+ LC(gọi card(S) bộ từ T) + LC(gọi card(R) bộ từ R) + CC(size(R))
+ LC(gọi s bộ từ T)*card(R)
Ví dụ 3.19: Xét một câu truy vấn, kết nối của quan hệ ngoài DUAN, quan hệ trong HOSODA trên thuộc tính SHDA. Giả sử DUAN và HOSODA được lưu tại hai trạm khác nhau và HOSODA có chỉ dẫn trên thuộc tính SHDA. Các chiến lược có thể đối với câu truy vấn này là:
1. Chuyển toàn bộ DUAN tới trạm của HOSODA 2. Chuyển toàn bộ HOSODA tới trạm của DUAN
3. Tìm các bộ của HOSODA khi cần cho mỗi bộ của DUAN 4. Chuyển HOSODA và DUAN tới một trạm thứ 3
Thuật toán R* dự đoán tổng chi phí của mỗi chiến lược và chọn chiến lược rẻ nhất. Chiến lược 4 hiển nhiên có chi phí cao hơn vì phải truyền cả hai quan hệ. Nếu kích thước của quan hệ DUAN lớn hơn nhiều kích thước của quan hệ HOSODA, chiến lược 2 có chi phí truyền thông tối thiểu và sẽ tốt nhất nếu chi phí xử lý địa phương không quá lớn so với chiến lược 1 và 3. Tuy nhiên, chi phí xử lý địa phương của chiến lược 1 và 3 có thể tốt hơn chiến lược 2 vì có chỉ dẫn trên thuộc tính kết nối. Nếu chiến lược 2 không tốt, chọn chiến lược 1 hoặc 3. Chi phí xử lý địa phương trong cả hai trường hợp này là như nhau. Nếu DUAN lớn và chỉ một số ít bộ của HOSODA kết nối được, chiến lược 3 chắc chắn có chi phí truyền thông ít nhất và là chiến lược tốt nhất. Ngược lại, nếu DUAN nhỏ và có nhiều bộ của HOSODA hợp, chiến lược 1 sẽ là tốt nhất.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
và thực nghiệm. Với quy hoạch động, cây của các lựa chọn được cấu trúc động và được lược bớt bằng cách loại các lựa chọn không có hiệu quả.
Độ phức tạp của thuật toán: Thuật toán này tìm kiếm toàn bộ lấy từ hệ R*. Về mặt thiết kế có thể xem là sự liên hệ n! hoán vị thứ tự các kết nối để từ đó chọn ra hoán vị với chi phí cực tiểu. Độ phức tạp của thuật toán này là tỷ lệ với n! và khiến chi phí cho việc tối ưu hoá lớn khi n lớn.
3.4.3.3 Thuật toán SDD-1
Thuật toán tối ưu hoá câu truy vấn SDD-1 là thuật toán trong lớp các thuật toán tham lam (greedy algorithms), cụ thể xuất phát từ thuật toán leo đồi, chọn một giải pháp có thể thực thi ban đầu và lặp đi lặp lại để cải tiến nó.
Thuật toán sử dụng phép nửa kết nối, hàm mục tiêu tối thiểu tổng chi phí truyền thông (chi phí địa phương và thời gian trả lời không được xét). Thuật toán sử dụng các thống kê cơ sở dữ liệu, một thống kê gắn với một quan hệ. Thuật toán cơ bản là trước tiên chọn một chiến lược thực hiện mềm dẻo mà được xác định một cách lặp. Sau đó sử dụng các phép tối ưu hoá sau để cải tiến tổng chi phí của chiến lược được chọn. Bước chính của thuật toán bao gồm việc xác định và sắp thứ tự các phép nửa kêt nối có lợi, tức là các phép nửa kết nối có chi phí nhỏ hơn lợi ích của nó.
Để chọn ra phép nửa kết nối hiệu quả, thuật toán sử dụng các đánh giá về chi phí (cost) và lợi ích (benefit) được xác định như sau:
Chi phí truyền của phép nửa kết nối:
Cost(R⋉AS) = CMSG + CTR*size(A(S)) Đánh giá về lợi ích:
Benefit(R⋉AS) = (1-SFSJ(S.A))*size(R)*CTR
Thuật toán SDD-1 nhận đầu vào là đồ thị câu truy vấn với n quan hệ, các thống kê cơ sở dữ liệu của mỗi quan hệ. Đầu ra của thuật toán là một chiến lược tổng thể để thực thi câu truy vấn. Thuật toán tiến hành theo 4 giai đoạn: khởi đầu, chọn các phép nửa kết nối có lợi, chọn trạm thực hiện, tối ưu hoá sau. Thuật toán được chi tiết bởi thủ tục SDD-1-QOA sau [7]:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Thuật toán SDD-1-QOA
Input: QG: Đồ thị câu truy vấn với n quan hệ, các thống kê của mỗi quan hệ Output: ES: Chiến lược thực hiện
BEGIN
ESlocal- operations(QG);
Sửa đổi các thống kê để phản ánh kết quả của xử lý địa phương;
BS{Tập các phép nửa kết nối có lợi};
For mỗi phép nửa kết nối SJ trong QG do
If cost(SJ) < benefit(SJ) then
BS BS SJ; End-if
End-for
While BSdo {Chọn các phép kết nối có lợi}
Begin
SJ most_benefit(BS); {SJ: semijoin có benefit_cost lớn nhất}
BS BS - SJ; {Loại SJ khỏi BS}
ES ES + SJ;
Sửa đổi các thống kê để phản ảnh kết quả của SJ thêm vào; BSBS - các phép nửa kết nối không có lợi ;
BSBSCác phép nửa kết nối có lợi mới ; End-while
{Chọn trạm thực hiện}
AS(ES) chọn trạm i mà i chứa số lượng dữ liệu lớn nhất sau tất cả các phép toán cục bộ;
ES ESsự truyền của các quan hệ trung gian tới AS(ES); {Tối ưu hoá sau}