Thuật toán System R*

Một phần của tài liệu Tìm hiểu về tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (Trang 55)

- Dạng chuẩn tuyển là tuyển (∨) của những phép hội (∧):

3.2.2.2.Thuật toán System 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ệ Ri ∈QT do

Begin

For mỗi đường truy nhập APij to Ri do

Xác định cost(APij);

Endfor

best_APiAPij 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

stratchiế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

LSkChiế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 System 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.

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. System 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ó:

+ 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)) (adsbygoogle = window.adsbygoogle || []).push({});

+ 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) + 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.8: 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 System 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.

Thuật toán System R* giảm đáng kể số các lựa chọn bằng sử dụng quy hoạch động 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.

Một phần của tài liệu Tìm hiểu về tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (Trang 55)