Thuật toán R*

Một phần của tài liệu (LUẬN văn THẠC sĩ) luận văn thạc sĩ tối ưu hóa truy vấn trong các cơ sở dữ liệu phân tán (Trang 62)

Thuật toán tối ƣu hóa truy vấn phân tán của R* là một sự mở rộng quan trọng của các kỹ thuật đã phát triển cho bộ tối ƣu System R[10]. 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í thấp nhất. Thuật toán xử lý 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 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 đó truy vấn đƣợc bắt đầu.

Mục tiêu của thuật toán R* là giảm tổng chi phí, bao gồm chi phí xử lý cục bộ và chi phí truyền thông. Thuật toán R* sử dụng cách tìm kiếm toàn diện, thực hiện tìm kiếm vét cạn tất cả các chiến lƣợc có thể để tìm ra chiến lƣợc tốt nhất với chi phí nhỏ nhất. Thuật toán không hỗ trợ việc phân mảnh hoặc bản sao, vì vậy, nó chỉ giải quyết các quan hệ nhƣ các đơn vị cơ bản. Thuật toán này lựa chọn một trạm làm trạm chủ, câu truy vấn đƣợc khởi tạo từ trạm này. Bộ tối ƣu truy vấn trên trạm chủ này có thể đƣa ra tất cả các quyết định giữa các trạm nhƣ trạm nào đƣợc chọn để thực hiện, mảnh nào sẽ đƣợc sử dụng và phƣơng thức truyền dữ liệu. Các trạm vệ tinh (apprentice sites) là các trạm khác lƣu trữ các quan hệ liên quan trong câu truy vấn, có thể đƣa ra các quyết định cục bộ còn lại và tạo ra các kế hoạch truy nhập cục bộ để thực thi câu truy vấn. Thuật toán đƣợc thực hiện nhƣ sau:

Thuật toán R*:

Input: QT: Cây truy vấn của câu truy vấn có n quan hệ.

Output: strat: Chiến lƣợc thực thi tối ƣu (có chi phí nhỏ nhất) Begin

For mỗi quan hệ Ri thuộc QT do (1)

For mỗi đƣờng truy cập APij tới Ri do Tính chi phí của APij;

best_APi  APij có chi phí nhỏ nhất;

For mỗi thứ tự (Ri1, Ri2,...,Rin) do {i= 1,...., n!} (2) Xây dựng chiến lƣợc (...((best APi1 Ri2) Ri3) … Rin); Tính chi phí của chiến lƣợc này;

strat  Chiến lƣợc có chi phí tốt nhất; (3)

For mỗi trạm k chứa một quan hệ trong QT do (4) LSk Chiến lƣợc cục bộ (chiến lƣợc, k); {Xác định chiến lƣợc tối ƣu cục

bộ LSk tại trạm k} Send (LSk, trạm k);

End.

Trong thuật toán này, dựa vào các thống kê về cơ sở dữ liệu và công thức đƣợc sử dụng để ƣớc lƣợng kích thƣớc của các kết quả trung gian và thông tin của đƣờng truy nhập, bộ tối ƣu hóa sẽ xác định thứ tự kết nối, các thuật toán nối (nested-loop hay merge - join) và đƣờng truy nhập cho mỗi phân mảnh. Ngoài ra, nó cũng xác định 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. Để thực hiện kết nối giữa hai quan hệ, sẽ có 3 trạm tham gia, đó là trạm chứa quan hệ đầu tiên, trạm chứa quan hệ thứ 2 và trạm chứa kết quả. Hai kỹ thuật truyền dữ liệu giữa các trạm:

- Chuyển toàn bộ (Ship-whole): Toàn bộ quan hệ sẽ đƣợc chuyển tới trạm kết nối và đƣợc lƣu trữ trong một quan hệ tạm thời trƣớc khi thực hiện phép kết

nối. Kỹ thuật này yêu cầu dữ liệu truyền lớn nhƣng số lƣợng thông báo nhỏ hơn và tốt hơn với các quan hệ nhỏ.

- Tìm về khi cần (Fetch – as – needed): Kỹ thuật này giống với phép nối nửa của một quan hệ trong với một nút ngoài. Quan hệ ngoài đƣợc quét tuần tự, từng bộ giá trị kết nối sẽ đƣợc gửi tới trạm của quan hệ trong. Những bộ giá trị của quan hệ trong phù hợp với giá trị của quan hệ ngoài sẽ đƣợc chọn và đƣợc gửi tới trạm chứa quan hệ ngoài. Kỹ thuật này phù hợp với quan hệ lớn hơn và phép kết nối có tính chọn lọc tốt.

Với kỹ thuật Fetch – as – needed sẽ có 4 chiến lƣợc nối R S, với R là quan hệ ngoài, S là quan hệ trong. Ký hiệu: LT là thời gian xử lý cục bộ, CT là chi phí truyền thông, s là số trung bình các bộ của S phù hợp với một bộ của R.

( ⋉ ) ( )

+ Chiến lƣợc 1: Chuyển toàn bộ quan hệ ngoài tới trạm chứa quan hệ trong. Tổng chi phí là:

Total_cost = LT( gọi card(R) bộ từ R) + CT (size (R)) + LT( 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ộ của quan hệ trong không thể kết nối khi chúng đến nên cần đƣợc lƣu trong một quan hệ T tạm thời. Vì vậy ta có:

Total_cost = LT(gọi card(S) bộ từ S) + CT(size(S))

+ LT(lƣu card(S) bộ trong T) + LT(gọi card(R) bộ từ R) + LT(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ộ của R, giá trị thuộc tính kết nối A đƣợc gửi tới trạm của S. Sau đó, s phù hợp với các bộ của S đƣợc gọi 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 = LT(gọi card(R) bộ từ R) + CT(length(A))*card(R) + LT(gọi s bộ từ S)*card(R) + CT(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 = LT(gọi card(S) bộ từ S) + CT(size(S))

+ LT(gọi card(S) bộ từ T) + LT(gọi card(R) bộ từ R) + CT(size(R))

+ LT(gọi s bộ từ T)*card(R)

Thuật toán 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ả. (adsbygoogle = window.adsbygoogle || []).push({});

Độ 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.

Ví dụ 2.16: Xét câu truy vấn q1: “Tên của các nhân viên làm dự án CAD/CAM” biểu diễn dƣới dạng SQL nhƣ sau:

SELECT NV.TenNV FROM NV, PC, DA

WHERE NV.MaNV = PC. MaNV and PC.MaDA = DA.MaDA

and DA.TenDA = “CAD/CAM”

có đồ thị nối nhƣ Hình 2.1

Hình 2.18: Đồ thị nối của truy vấn q1

3 quan hệ đƣợc lƣu trên 3 trạm khác nhau.

Các bƣớc của thuật toán đƣợc minh họa nhƣ sau:

-Bƣớc (1): Giả sử chọn đƣợc các đƣờng truy cập các quan hệ tốt nhất nhƣ sau:

+ NV: Quét tuần tự (vì không có phép chọn nào trên NV)

+ PC: Quét tuần tự (vì không có phép chọn nào trên PC)

+ DA: Chỉ mục trên trƣờng TenDA (do có phép chọn trên DA dựa vào TenDA)

-Bƣớc (2), (3): Xác định các chiến lƣợc kết nối với mỗi thứ tự (tối đa 3! thứ tự):  PC DA NV  DA PC NV  PC NV DA  NV x DA PC  DA x NV PC

Ta có cây chiến lƣợc nhƣ Hình 2.19. Mức đầu tiên của cây thể hiện đƣờng truy cập từng quan hệ tốt nhất. Mức thứ 2 thể hiện phƣơng thức kết nối tốt nhất của từng quan hệ với quan hệ khác. Chiến lƣợc NV x DA và DA x NV đƣợc tỉa do sử dụng tích đề các đƣợc tránh sử dụng (thay thế bởi chiến lƣợc khác). Giả sử NV PC và PC DA có chi phí cao hơn PC NV và DA PC, do đó chúng đƣợc tỉa. Hai khả năng còn lại đƣợc thể hiện ở mức độ thứ 3 của cây. Thứ tự kết nối tốt

P C N V D A MNV MDA

nhất có chi phí tốt nhất nằm trong một trong 2 chiến lƣợc: (PC NV) DA và (DA PC) NV. Do DA đã đƣợc xác định đƣờng truy cập theo chỉ mục trên trƣờng TenDA tốt hơn là quét tuần tự trên PC nên chiến lƣợc (DA PC) NV sẽ đƣợc lựa chọn là chiến lƣợc có chi phí tốt nhất để thực thi câu truy vấn. Cụ thể là: Chọn trên quan hệ DA theo chỉ mục TenDA  kết nối với quan hệ PC theo chỉ mục MDA  kết nối với NV theo chỉ mục MNV.

-Bƣớc (4): Việc truyền dữ liệu giữa các trạm sử dụng một trong hai kỹ thuật Ship-whole hoặc Fetch – as – needed đƣợc trình bày ở trên dựa vào lực lƣợng của từng quan hệ và của quan hệ trung gian.

Hình 2.19: Các thứ tự kết nối 2.4.3. Thuật toán SDD-1

Thuật toán tối ƣu hóa truy vấn SDD-1 xuất phát từ giải thuật “leo dốc”, thuật toán này thực hiện 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ó cho đến khi đạt tới đích.

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 chi phí truyền thông (chi phí địa phƣơng và thời gian đáp không đƣợc xét), thuật toán sử dụng các thống kê trên cơ sở dữ liệu, đƣợc gọi là hồ sơ cơ sở dữ liệu, một hồ sơ gắn với một quan hệ. Về cơ bản thuật toán đầu 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 hóa sau

NV x DA Tỉa PC DA NV PC Tỉa PC DA Tỉa PC NV NV DA PC DA x NV Tỉa (PC NV) DA (DA PC) NV

(posttimization) để 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 gồm việc xác định và sắp thứ tự 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í và lợi ích đƣợc xác định nhƣ sau:

Chi phí của phép nửa kết nối:

( ⋉A S) = 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à một đồ thị 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 truy vấn. Giải thuật tiến hành theo bốn giai đoạn: khởi đầu, chọn các phép toán nửa kết nối có lợi, chọn trạm thực hiện và tối ƣu hóa sau, đƣợc trình bày bởi thuật toán SDD-1 sau:

Thuật toán SDD-1

Input: QG: Đồ thị truy vấn với n quan hệ, các hệ thống kê của mỗi quan hệ Output: ES: Chiến lƣợc thực hiện. (adsbygoogle = window.adsbygoogle || []).push({});

Begin

ES  local-operation(QG);

Sửa đổi các thống kê để phản ánh các kết quả 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 kết nối SJ trong QG do If cost(SJ) < benefit(SJ) then BS  BS I  SJ end-if

end-for

while BS ≠  do {Chọn các phép nửa kết nối có lợi}

SJ  most_beneficial (BS) {SJ: nửa kết nối với benefit-cost lớn nhất} BS  BS - SJ {loại SJ khỏi BS}

ES  BS + SJ {bổ sung SJ vào chiến lƣợc thực thi ES} Sửa đổi thống kê để phản ánh kết quả của SJ thêm vào

BS  BS – các phép nửa kết nối không có lợi BS  BS  cá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  ES  sự truyền của các quan hệ trung gian tới AS(ES) {tối ƣu hóa sau}

for mỗi quan hệ Ri tại AS(ES) do

for mỗi phép nửa kết nối SJ của Ri với Rj do if cost(ES) > cost(ES – SJ) then

ES  ES – SJ

end-if end-for end-for

End. {Thuật toán SDD – 1}

1) Giai đoạn khởi đầu: Sinh ra một tập các phép nửa kết nối có lợi.

BS = {SJ1,…SJn} và một chiến lƣợc thực thi (ES) bao gồm các xử lý địa phƣơng.

2) Giai đoạn hai: Lặp lại lựa chọn ra các phép kết nối có lợi nhất (SJi) từ BS, sửa đổi các thống kê cơ sở dữ liệu và BS. Sự sửa đổi ảnh hƣởng đến hệ R. Vòng lặp kết thúc khi tất cả các phép nửa kết nối trong BS đã đƣợc thêm vào ES sẽ là thứ tự thực hiện của chúng.

3) Giai đoạn chọn các trạm thực hiện: Với mỗi trạm đề cử, đánh giá chi phí truyền tất cả dữ liệu đƣợc yêu cầu tới nó và chọn trạm có chi phí nhỏ nhất. 4) Giai đoạn tối ƣu hóa sau: Loại bỏ những phép kết nối trong chiến lƣợc

thực thi chỉ ảnh hƣởng đến quan hệ đƣợc lƣu tại trạm thực hiện. Bộ tối ƣu hóa SDD-1 dựa trên thừa nhận các quan hệ có thể đƣợc truyền tới trạm khác. Điều này đúng cho tất cả các quan hệ loại trừ những quan hệ thuộc trạm thực hiện, mà chúng đƣợc chọn sau khi các phép nửa kết nối có lợi đƣợc xem xét. Vì vậy, một số phép nửa kết nối không có lợi bƣớc tối ƣu hóa truy vấn sau loại chúng khỏi chiến lƣợc thực hiện.

Ví dụ 2.16: Xét truy vấn

SELECT *

FROM E, G, J

WHERE E.MANV = G.MANV

AND G.MANV = J.MANV

Hình 2.20 đƣa ra đồ thị kết nối của truy vấn và thống kê quan hệ. Giả sử CMSG = 0 và CTR = 1 Quan hệ Lực lƣợng Kích thƣớc bộ Kích thƣớc quan hệ E 30 50 1500 J 100 30 3000 G 50 40 2000 Thuộc tính SFSJ Kích thƣớc (πATRI) E.MANV 0.3 120 G.MANV 0.8 400 G.MANV 1 400 J.MANV 0.4 200 Bảng: Truy vấn ví dụ và thống kê

Các phép kết nối có lợi ban đầu nhƣ sau: (adsbygoogle = window.adsbygoogle || []).push({});

SJ1: G E, lợi ích là 2100 = (1 - 0.3) * 3000 và chi phí là 120 SJ2: G J, lợi ích là 1800 = (1 - 0.4) * 3000 và chi phí là 200 Hai phép kết nối không có lợi là:

SJ3: E G, lợi ích là 300 = (1 - 0.8) * 1500 và chi phí là 400 SJ4: J G, lợi ích là 0 và chi phí là 400

Tại bƣớc lặp đầu tiên, SJ1 đƣợc thêm vào chiến lƣợc thực hiện ES. Kích thƣớc của G thay đổi thành 360 = 1500 * 0.24); SFSJ = (E.ENO) thay đổi.

Tại bƣớc lặp thứ ba, phép nửa kết nối còn lại là SJ2 đƣợc thêm vào ES. Kích thƣớc của G thay đổi thành 360 = 900 * 0.4; SFSJ(G.JNO) thay đổi.

Sau khi rút gọn, số lƣợng dữ liệu lƣu tại trạm 1 là 360, trạm 2 là 360, trạm 3 là 2000. Vì vậy trạm 3 đƣợc chọn làm trạm thực hiện. Bƣớc tối ƣu hóa sau không bỏ bất cứ phép nửa kết nối vì chúng đều có lợi. Chiến lƣợc đƣợc chọn là gửi (E G) J và (E G) tới trạm 3, tại đó kết quả cuối cùng đƣợc tính toán.

2.4.4. Thuật toán Hybrids đàn kiến tối ƣu truy vấn phân tán

Dựa trên ƣu điểm, nhƣợc điểm của 2 thuật toán quy hoạch động và tối ƣu đàn kiến, Tansel và cộng sự đã đề xuất thuật toán DP-ACO để tối ƣu hóa truy vấn đa kết nối bằng (multi way chain equijoin queries) trong môi trƣờng CSDL phân tán. Quy hoạch động tạo ra những thiết kế tốt nhất có thể nhƣng có thời gian thực hiện dài và yêu cầu bộ nhớ rất lớn khi kích thƣớc của các quan hệ và số lƣợng kết nối tăng lên trong truy vấn. Quy hoạch động có thể thực hiện tối ƣu đến 7 quan hệ nhƣng DP-ACO đã đƣợc chứng minh là giải pháp khả thi bằng việc tạo ra các kế hoạch thực thi tốt với các câu truy vấn 15 quan hệ trong thời gian giới hạn và không gian bộ nhớ hạn chế. Một ƣu điểm khác của DP-ACO là có thể dễ dàng thích ứng với bộ tối ƣu hóa truy vấn đang tồn tại sử dụng thuật toán dựa trên quy hoạch động.

Thuật toán dựa trên hành vi của đàn kiến thực trong việc thiết lập đƣờng đi ngắn nhất giữa thức ăn và tổ của nó. Kiến có thể giao tiếp với nhau thông qua các hóa chất phát ra từ chúng trên đƣờng đi từ tổ tới chỗ thức ăn và ngƣợc lại, gọi là pheromone. Nhƣ vậy, đƣờng đi ngắn hơn là đƣờng có lƣợng pheromone cao hơn, kiến sẽ có xu hƣớng chọn con đƣờng ngắn hơn này.

Thuật toán tối ƣu đàn kiến: Hình 2.21 mô tả quy trình ra quyết định của loài kiến trong việc lựa chọn đƣờng đi của chúng. Khi các con kiến gặp nhau ở điểm ra quyết định A, một số sẽ lựa chọn đi theo hƣớng này và một số chọn đi theo hƣớng khác một cách ngẫu nhiên. Giả sử kiến có tốc độ di chuyển nhƣ nhau, những con lựa chọn bên ngắn sẽ đến B nhanh hơn so với những con chọn bên còn lại. Kết quả

Một phần của tài liệu (LUẬN văn THẠC sĩ) luận văn thạc sĩ tối ưu hóa truy vấn trong các cơ sở dữ liệu phân tán (Trang 62)