Thuật toán SDD-1

Một phần của tài liệu Tối ưu truy vấn cơ sở dữ liệu quan hệ và cơ sở dữ liệu phân tán bằng phương pháp Heuristic (Trang 50)

Thuật toán SDD-1 sử dụng nối nửa để hạ thấp tổng chi phí của các câu truy vấn nối. Trở ngại lớn nhất của phƣơng pháp nối đƣợc mô tả ở phần trên là toàn bộ quan hệ - toán hạng phải đƣợc truyền giữa các trạm, phép kết nối nửa làm việc nhƣ một tác nhân rút gọn kích thƣớc giống nhƣ phép chọn.

Kết nối của hai quan hệ R và S trên thuộc tính A, lƣu tại trạm 1 và 2 tƣơng ứng, có thể tính bằng cách thay một hoặc hai toán hạng bằng một nối nửa với quan hệ kia nhờ quy tắc sau đây:

 R AS = (RA S)A S

 R AS = RA (SA R)

 R AS = (RA S )A(SA R)

Việc chọn lựa một trong ba phƣơng án nối nửa trên đòi hỏi phải ƣớc lƣợng các chi phí tƣơng ứng của chúng. Sử dụng nối nửa sẽ có ích nếu chi phí tạo và gửi nó đến trạm kia nhỏ hơn chi phí gửi toàn bộ quan hệ - toán hạng và thực hiện nối thực sự. Để thấy đƣợc lợi ích việc nối nửa chúng ta hãy so sánh chi phí của hai lựa chọn: R A S với (RAS)AS, với giả thiết rằng size(R)<size(S). Chƣơng trình sử dụng nối nửa đƣợc trình bày nhƣ sau:

1. A(S)  trạm 1

2. Trạm 1 tính toán R‟ = RA S 3. R‟  trạm 2

4. Trạm 2 tính toán R‟ A S

Cách tiếp cận nửa kết nối là tốt nếu: size(A(S)) + size(RS) < size(R) Phƣơng pháp nối nửa là tốt hơn nếu nối nửa hoạt động nhƣ một tác nhân rút gọn đầy đủ, tức là nếu một số ít các bộ của R tham gia vào nối, ngƣợc lại

phƣơng pháp nối là tốt hơn nếu nhƣ hầu hết các bộ tham gia vào nối, bởi vì phƣơng pháp nối nửa đòi hỏi thêm một lần truyền kết quả chiếu nữa.

Điều quan trọng cần chú ý rằng không có cách tiếp cận nào là tốt nhất, và chúng cần đƣợc xem nhƣ là những phƣơng án bổ trợ cho nhau.

Nhận xét tổng quát, nối nửa có thể làm giảm đi kích thƣớc của những quan hệ-toán hạng có trong các câu truy vấn đa nối. Tuy nhiên trong trƣờng hợp này việc tối ƣu hoá câu truy vấn cũng trở lên phức tạp hơn.

Ví dụ 3.5:

Xét lại đồ thị nối của các quan hệ NHANVIEN, PHANCONG và DUAN đã nêu ở ví dụ 3.3 và hình 15, ta thấy có thể áp dụng thuật toán nối trƣớc đây bằng cách dùng các nối nửa cho từng nối. Ví dụ về một chƣơng trình tính toán, NHANVIEN  PHANCONG  DUAN là:

NHANVIEN‟  PHANCONG‟  DUAN với NHANVIEN‟ = NHANVIEN  PHANCONG và PHANCONG‟ = PHANCONG  DUAN

Ta có thể rút gọn thêm nữa kích thƣớc của một quan hệ - toán hạng bằng dùng nhiều nối nửa. Ví dụ NHANVIEN‟ có thể đƣợc thay thế bằng NHANVIEN”=NHANVIEN(PHANCONGDUAN) bởi vì nếu size(PHANCONGDUAN)size(PHANCONG), chúng ta có size(NHANVIEN”)  size(NHANVIEN‟). Một dãy nối nửa nhƣ vậy đƣợc gọi là chƣơng trình nối nửa. Tuy nhiên không phải tất cả các quan hệ đều rút gọn, có thể bỏ qua các quan hệ không liên quan đến các nối cuối cùng.

Đối với một quan hệ đã cho sẽ có nhiều chƣơng trình nối nửa khác nhau, trong đó có một chƣơng trình nối nửa tối ƣu, đƣợc gọi là chƣơng trình thu gọn hoàn toàn, mà với mỗi quan hệ R nó rút gọn R nhiều hơn các chƣơng trình khác. Vấn đề là phải tìm ra chƣơng trình này. Một phƣơng pháp đơn giản đƣợc áp dụng là ƣớc lƣợng kết quả rút gọn kích thƣớc của tất cả mọi chƣơng trình nối nửa có thể và chọn ra chƣơng trình tốt nhất. Các bài toán liệt kê gặp phải hai vấn

 Một loại truy vấn nữa, đƣợc gọi là truy vấn cây (tree queries), thì có trình rút gọn hoàn toàn, nhƣng số chƣơng trình nối nửa có thể là hàm mũ theo số lƣợng quan hệ, khiến cho bài toán liệt kê trở thành NP-Hard. Tuy nhiên có một lớp truy vấn rất quan trọng gọi là truy vấn chuỗi (chain query), và có một thuật toán đa thức cho nó. Truy vấn chuỗi có một đồ thị nối, trong đó các quan hệ có thể đƣợc sắp xếp thứ tự, và mỗi quan hệ chỉ nối với quan hệ kế tiếp theo thứ tụ đó.

Do rất khó cài đặt một thuật toán tổng quát hoàn toàn nên phần lớn các hệ thống đều dùng các nối nửa đơn lẻ để rút gọn kích thƣớc quan hệ.

Ví dụ 3.6:

Xét các quan hệ ở phần trƣớc và đƣa thêm thuộc tính TPHO vào cho các quan hệ NHANVIEN (với tên mới là NHANVIENTP) và DUAN (tên mới là DUANTP) của CSDL ta thu đƣợc quan hệ nhƣ sau:

NHANVIENTP( MSNV, TENNV, NNGH, TPHO) PHANCONG( MSNV, MSDA, NVU, TGIAN) DUANTP( MSDA, TENDA, NSDA, TPHO)

ứng với câu truy vấn tên của các nhân viên sống trong thành phố có dự án do họ thực hiện ta có: SELECT NHANVIENTP.TENNV FROM NHANVIENTP,PHANCONG,DUANTP WHERE NHAVIENTP.MSNV=PHANCONG.MSNV AND PHANCONG.MSDA=DUANTP.MSDA AND NHANVIENTP.TPHO=DUANTP.TPHO

Xuất phát từ câu truy vấn này ta có đƣợc đồ thị nối, có vòng nhƣ trong hình 16(1)

Không có trình rút gọn hoàn toàn nào dành cho câu truy vấn này. Thực sự thì có thể sử dụng các chƣơng trình nối nửa để rút gọn nó, nhƣng số lƣợng phép toán nhân với số lƣợng các bộ trong mỗi quan hệ lại khiến cho lối tiếp cận này không hiệu quả. Một giải pháp đƣợc đề xuất là biến đổi đồ thị vòng thành cây, bằng cách loại bỏ một cung của đồ thị và thêm vào các vị từ thích hợp cho các cung khác sao cho vị từ bị loại bỏ đƣợc bảo toàn nhờ tính bắc cầu. Ta thu đƣợc đồ thị nhƣ trong hình 16(2). Ta nhận thấy rằng với các vị từ đƣợc thêm vào:

NHANVIENTP.TPHO=PHANCONG.TPHO NHANVIENTP PHANCONG PHANCONG NHANVIENTP DUANTP DUANTP NHANVIENTP.MSNV =PHANCON.MSNV PHANCONG.MSDA =DUANTP.MSDA NHANVIENTP.TPHO =DUANTP.TPHO NHANVIENTP.MSNV =PHANCONG,MSNV and NHANVIENTP.TPHO =PHANCONG.TPHO PHANCONG.MSDA =DUANTP.MSDA and PHANCONG.TPHO= DUANTP.TPHO Hình 16(1). Truy vấn ng Hình 16(2). Truy vấn không vòng

Thuật toán SDD-1

Thuật toán tối ƣu hoá của SDD-1 là thuật toán trong lớp các thuật toán tham lam (greedy algorithms). Thuật toán đƣợc cải tiến từ thuật toán “leo đồi”. Thuật toán không dùng các phép nối nửa cũng nhƣ không chấp nhận nhân bản và phân đoạn.

Thuật toán leo đồi đƣợc tiến hành nhƣ sau : Đầu vào của thuật toán là đồ thị vấn tin, vị trí các quan hệ và số liệu thống kê về quan hệ. Sau khi hoàn tất xử lý cục bộ ban đầu, một giải pháp khả thi ban đầu đƣợc chọn ra có chứa tất cả các truyền thông giữa các vị trí.

Thuật toán leo đồi thuộc nhóm thuật toán thiển cận, khởi đầu với một giải pháp khả thi rồi cải thiện nó lặp đi lặp lại. Tuy nhiên có những chiến lƣợc thực thi ban đầu có thể có chi phí lớn nhƣng có lợi ích lớn hơn lại có thể bị bỏ qua. Hơn nữa thuật toán thiên về hƣớng tìm chi phí nhỏ nhất cục bộ chứ không phải tìm chi phí toàn cục nhỏ nhất.

Thuật toán leo đồi đã đƣợc cải tiến nhiều trong SDD-1 bằng một số cách. Phiên bản cải tiến sử dụng rộng rãi các nối nửa, hàm mục tiêu là tối thiểu chi phí truyền ( chi phí xử lý cục bộ, và thời gian đáp ứng không đƣợc xét đến).

Thuật toán sử dụng các số liệu thống kê trên CSDL, đƣợc gọi là hồ sơ CSDL (database profile), trong đó một hồ sơ đƣợc liên kết tƣơng ứng với một quan hệ. Thuật toán cũng lựa chọn một phƣơng án khả thi ban đầu rồi tinh chỉnh đệ quy. Sau đó phép tối ƣu hoá đƣợc thực hiện, nhằm cải thiện tổng chi phí của chiến lƣợc đƣợc chọn. Bƣớc quan trọng của thuật toán là xác định và sắp thứ tự các kết nối nửa có lợi, đó là các nối nửa có chi phí thực hiện thấp hơn lợi ích của chúng mang lại.

Chi phí cho phép nối nửa là chi phí truyền các thuộc tính nối nửa A:

Cost(R A S) = TMSG + TTR * size(AS)

Với TMSG là thời gian cố định để khởi tạo và nhận một thông báo, TTR là thời gian cần để truyền một đơn vị dữ liệu từ trạm này đến trạm khác.

Lợi ích của nó là chi phí đƣờng truyền các bộ không cần thiết của R, tránh đƣợc do nối nửa: benefit(R A S) = (1-SFSJ(S.A)) * size(R) * TTR

Thuật toán SDD-1 nhận đầu vào là đồ thị truy vấn có n quan hệ, các số liệu thống kê CSDL của mỗi quan hệ. Thuật toán đƣợc tiến hành theo 4 giai đoạn: khởi gán, chọn các phép nối nửa có lợi, chọn trạm thực hiện, sau tối ƣu hoá. Thuật toán đƣợc chi tiết bởi thủ tục sau:

Thuật toán tối ưu hoá phân tán SDD-1(SDD-1-QOA)

INPUT: QG đồ thị truy vấn n quan hệ, số liệu thống kê cho mỗi quan hệ OUTPUT: ES chiến lƣợc thực thi truy vấn

Begin

ES thao tác cục bộ(QG)

Sửa đổi các số liệu thống kê để phản ánh tác dụng của xử lý cục bộ BS   { tập các nối nửa có ích}

For mỗi nối nửa SJ trong QG do If cost(SJ) < benefit(SJ) then

BS BS SJ End-if

End-for

While BS  do {chọn các nối nửa có lợi} Begin

SJ most_benefit(BS) {SJ: nối nửa có benefit-cost lớn nhất} BS BS – SJ { loại SJ ra khỏi BS}

ES ES + SJ {thêm SJ vào chiến lược thực thi}

Sửa lại số liệu thống kê để phản ánh tác dụng của việc thêm SJ BS BS – các nối nửa không có lợi

AS(ES) chọn vị trí i sao cho i có chứa lượng dữ liệu lớn nhất sau khi thực hiện các thao tác cục bộ

ES ES truyền các quan hệ trung gian đến AS(ES) { sau tối ưu hoá }

for mỗi quan hệ Ri tại AS(ES) do for mỗi nối nửa 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.

 Giai đoạn khởi gán sinh ra một tập nối nửa có lợi BS = {SJ1, SJ2,…, SJk}, và một chiến lƣợc thực thi ES chỉ gồm các xử lý cục bộ.

 Bƣớc tiếp theo: chọn lặp đi lặp lại các nối nửa có lợi ích nhất từ BS, cập nhật số liệu thống kê và BS. Sự thay đổi này ảnh hƣởng đến các thống kê của quan hệ R có mặt trong SJi và các phép nối nửa còn lại trong BS có dùng quan hệ R. Giai đoạn lặp kết thúc khi tất cả các nối nửa trong BS đã đƣợc gắn vào chiến lƣợc thực thi. Thứ tự gắn các nối nửa vào ES sẽ là thứ tự thực thi chúng.

 Giai đoạn lựa 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

 Giai đoạn sau tối ƣu hoá. 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 trữ tại trạm hiện tại.

Bộ tối ƣu hoá 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ệ ngoạ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ối nửa có lợi đƣợc xem

xét. Vì vậy, một số phép nối nửa không có lợi đƣợc bƣớc tối ƣu hoá truy vấn sau loại bỏ khỏi chiến lƣợc thực thi.

Ví dụ 3.7:

Chúng ta xét câu truy vấn sau: SELECT R3.C

FROM R1, R2, R3 WHERE R1.A = R2.A AND R2.B = R3.B

Ta thu đƣợc đồ thị truy vấn và số liệu thống kê nhƣ sau:

Quan hệ Lực lƣợng Kích thƣớc bộ Kích thƣớc quan hệ

R1 30 50 1500

R2 100 30 3000

R3 50 40 2000

Thuộc tính SFSJ Size(attribute)

R1.A 0.3 36 R2.A 0.8 320 R2.B 1.0 400 R1 R2 R3 Trạm 1 Trạm 2 Trạm 3 A B

Ta thấy có 2 nối nửa có lợi:

SJ1:R2  R1 với lợi ích là 2100=(1 – 0.3)*3000 và chi phí là 36 SJ2:R2  R3 với lợi ích là 1800=(1 – 0.4)*3000 và chi phí là 80 Ngoài ra còn có 2 nối nửa không có lợi:

SJ3:R1  R2 với lợi ích là 300=(1 – 0.8)*1500 và chi phí là 320 SJ4:R3  R2 với lợi ích là 0 và chi phí là 400.

Quá trình lặp đƣợc thực hiện: Vòng lặp 1:

 Lấy SJ1 ra khỏi BS, đƣa nó vào chiến lƣợc thực thi ES

 Cập nhật số liệu thống kê Size(R2) = 900(= 3000*0.3) SFSJ(R2.a)  0.8*0.3 = 0.24

 Vòng lặp 2:

 Có 2 nối nửa có ích:

 SJ2:R2‟  R3 với lợi ích là 540=(1 – 0.4)*900 và chi phí là 200, với R2 thu đƣợc nhờ SJ1

 SJ3:R1  R2‟ với lợi ích là 1140=(1 – 0.24)*1500 và chi phí là 96  Bổ sung SJ3 vào ES  Cập nhật số liệu thống kê: Size(R1)=360(=1500*0.24) SFSJ(R1.A)  0.3*0.24=0.072 Vòng lặp 3:

 Không có nối nửa có lợi nào mới

 Cập nhật số liệu thống kê: Size(R2)=360(=900.0.4)

Lƣu ý rằng độ chọn của R2 cũng có thể thay đổi. Sau khi rút gọn, việc cần làm là chọn trạm tổng hợp, đó là nơi chứa phần lớn dữ liệu. Trong thí dụ này ta có số liệu nhƣ sau:

Lƣợng dữ liệu đƣợc lƣu tại trạm nhƣ sau:

Trạm 1:360 Trạm 2:360 Trạm 3:2000 Nhƣ vậy trạm 3 sẽ đƣợc chọn làm trạm tổng hợp.

Tối ƣu hoá sau không loại bỏ đƣợc nói nửa nào nữa vì tất cả chúng đều có lợi. Chiến lƣợc đƣợc chọn nhƣ sau:

 Gửi R2  R1  R3 đến trạm 3

 Gửi R1  R2 đến trạm 3

 Tính toán kết quả cuối cùng tại trạm 3

Một phần của tài liệu Tối ưu truy vấn cơ sở dữ liệu quan hệ và cơ sở dữ liệu phân tán bằng phương pháp Heuristic (Trang 50)

Tải bản đầy đủ (PDF)

(81 trang)