Thuật toán INGRES

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 30)

R 2= 1 ⋉1.SHT V= SACH.SHTV SACH Kết quả = π2 TENSACH

2.4.1.Thuật toán INGRES

INGRES sử dụng thuật toán tối ưu hoá câu truy vấn động, chia một truy vấn phép tính quan hệ thành các truy vấn nhỏ hơn. Một truy vấn đa biến đầu tiên được phân tích thành một dãy các truy vấn con có một biến duy nhất chung, mỗi truy vấn con được dựa vào kết quả của truy vấn con trước đó. Sau đó, mỗi truy vấn con được xử lý bởi "bộ xử lý truy vấn một biến" (OVQP: one-variable query processor). OVQP tối ưu truy nhập tới một quan hệ đơn, bằng cách lựa chọn phương pháp truy nhập tốt nhất (chỉ số, quét tuần tự). Ví dụ: với tân từ dạng <A = value> th nên dùng một chỉ số trên A; với tân từ dạng <A ≠ value> thì nên dùng quét tuần tự.

Câu truy vấn q được phân tích thành hai câu truy vấn con qi-1 và qi, ký hiệu

qi-1 → qi, nghĩa là qi-1 được thực hiện trước và kết quả của nó được sử dụng

bởi qi. Bộ xử lý câu truy vấn INGRES phân tích q thành n câu truy vấn q1→q2→q3...→qn. Sự phân tích này sử dụng hai kỹ thuật cơ bản phân tách và thay thế.

Nếu q biểu diễn dạng:

FROM R1 V1, R2 V2,..., Rn Vn WHERE P1(V1.Ai')

AND P2(V1.A1, V2.A2,..., Vn.An)

Trong đó: Câu lệnh from xác định các biến bộ (ví dụ V1) trên các quan hệ (ví dụ R1); Ai, Ai' là danh sách các thuộc tính của quan hệ Ri; P1 là tân từ một đối liên quan đến các thuộc tính của R1; P2 là tân từ nhiều đối liên quan đến các thuộc tính của R1, ...,Rn. Một truy vấn như vậy có thể phân tách thành hai truy vấn con q' → q'' bằng cách phân tích các biến chung V1:

q': SELECT V1.A1 INTO R1' FROM R1 V1 WHERE P1(V1.A1') q": SELECT V2.A2, V3.A3,..., Vn.An FROM R1' V1, R2 V2,..., Rn Vn WHERE P2(V1.A1, V2.A2,..., Vn.An)

Trong đó: R1' là quan hệ tạm thời bao hàm các thông tin cần thiết cho tiếp tục truy vấn.

Ví dụ 2.6: Xét lược đồ quan hệ sau:

KYSU(SHKS, TENKS, NGHE)

HOSODA(SHKS, SHDA, TRNH,THOIGIAN) DUAN(SHDA, TENDA, NGANSACH)

Trong đó:

SHKS: Số hiệu kỹ sư TENKS: Tên kỹ sư NGHE: Nghề nghiệp SHDA: Số hiệu dự án

TRNH: Trách nhiệm với dự án

Câu truy vấn: "T m tên kỹ sư làm việc cho dự án CAD/CAM" q1 : SELECT KYSU.TENKS FROM KYSU,HOSODA,DUAN WHERE KYSU.SHKS=HOSODA.SHKS AND HOSODA.SHDA=DUAN.SHDA AND TENDA=“CAD/CAM”

q1 được thay bởi q11 → q', trong đó JTG là quan hệ trung gian: q11: SELECT DUAN.SHDA INTO JTG

FROM DUAN

WHERE TENDA=“CAD/CAM” q': SELECT KYSU.TENKS

FROM KYSU, HOSODA, JTG

WHERE KYSU.SHKS=HOSODA.SHKS

AND HOSODA.SHDA=JTG.SHDA

q' được phân tách tiếp như sau, trong đó GTG là quan hệ trung gian: q12: SELECT HOSODA.SHKS INTO GTG;

FROM HOSODA, JTG

WHERE HOSODA.SHDA=JTG.SHDA q13: SELECT KYSU.TENKS

FROM KYSU,GTG

WHERE KYSU.SHKS=GTG.SHKS

Như vậy, q1 có thể biến đổi thành q11→q12→q13. Câu truy vấn q11 là đơn biến và có thể thực hiện bởi OVQP, q12 và q13 không là đơn biến và không thể r t gọn bởi phân tách.

Một truy vấn con đa biến, không thể tiếp tục phân tách (ví dụ q12, q13), được biến đổi thành tập các truy vấn con có ít nhất một biến bởi sự thay thế bộ. Cho một câu truy vấn q n - biến, các bộ của một biến được thay thế bởi

các giá trị của ch ng, do đó đưa ra một bộ của các truy vấn (n - 1) - biến. Sự thay thế bộ tiến hành như sau: (adsbygoogle = window.adsbygoogle || []).push({});

- Một biến trong q được chọn để thay thế bộ, ví dụ V1

- Với mỗi bộ t1i trong R1, các thuộc tính thuộc V1 trong q được thay thế bởi các giá trị thực của ch ng trong t1i, do đó sinh ra truy vấn q' với n - 1 biến.

Như vậy, tổng số các truy vấn q' được đưa ra bởi thay thế bộ là card(R1). Sự thay thế bộ có thể tóm tắt như sau:

q(V1, V2, V3, ....,Vn) được thay thế bởi {q'(t1i, V2, V3, ....,Vn), t1i ∈ R1}

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

q13: SELECT KYSU.TENKS

FROM KYSU,GTG

WHERE KYSU.SHKS=GTG.SHKS

Quan hệ được xác định bởi biến GTG trên một thuộc tính đơn (SHKS). Giả sử nó chỉ chứa hai bộ <E1> và <E2>. Sự thay thế của GTG sinh ra hai câu truy vấn con một biến:

q131: SELECT KYSU.TENKS

FROM KYSU

WHERE KYSU.SHKS=“E1” q132: SELECT KYSU.TENKS

FROM KYSU

WHERE KYSU.SHKS=“E2” Truy vấn có thể xử lý bởi VOQP

Sau đây là thuật toán tối ƣu hóa câu truy vấn của INGRES, gọi là INGRES-QOA

Thuật toán: INGRES-QOA

Input: MVQ: Truy vấn đa biến với n biến Output: output: Câu truy vấn tối ưu Begin

output ← φ

if n=1 then

output ← run(MVQ) {Thực hiện truy vấn một biến}

else begin {tách MVQ thành m truy vấn một biến và một truy vấn nhiều biến}

OVQ1,...,OVQm, MVQ' ← MVQ

for i ← 1 to m do

begin

output' ← run(OVQi) {Thực thi OVQi}

output ← output ∪ output' {hợp tất cả các kết quả}

endfor

V←CHOOSE-VARIABLE(MVQ') {V được chọn cho phép thế bộ}

for mỗi bộ t ∈ V do

begin (adsbygoogle = window.adsbygoogle || []).push({});

Endif end

MVQ" ← thay thế các giá trị cho t trong MVQ' output ← INGRES-QOA(MVQ") {gọi đệ quy} output ← output ∪ output {hợp tất cả các kết quả}

End. {INGRES-QOA}

2.4.2. Thuật toán SYSTEM R

System R thực hiện tối ưu hóa truy vấn tĩnh, đầu vào là một cây đại số quan hệ do phân tích một truy vấn SQL, đầu ra là sơ đồ thực hiện cây đại số quan hệ "tối ưu".

- Dự đoán phương pháp truy nhập tới mỗi quan hệ đơn tốt nhất dựa trên một giả thiết chọn.

- Với mỗi quan hệ R, đánh giá thứ tự kết nối tốt nhất, trong đó R được truy nhập trước tiên sử dụng phương pháp truy nhập quan hệ - đơn tốt nhất của nó.

Có hai thuật toán có thể để xét các phép kết nối. Khi kết nối hai quan hệ, quan hệ có các bộ đọc trước gọi là quan hệ ngoài, quan hệ có các bộ được t m thấy tùy theo các giá trị có được từ quan hệ ngoài gọi là quan hệ trong. Quyết định quan trọng với mỗi phương pháp kết nối là xác định hướng truy nhập tới quan hệ trong rẻ nhất.

Phương pháp 1, gọi là các vòng l p lồng nhau, thực hiện tích hai quan hệ. Với mỗi bộ của quan hệ ngoài, các bộ của quan hệ trong thoả mãn giả thiết kết nối được gọi ra để tạo quan hệ kết quả. Nếu không đánh chỉ số, với các quan hệ được lưu trữ theo thứ tự trên n1, n2 bộ bản ghi, thuật toán này có chi phí là n1*n2.

Phương pháp 2, gọi là kết nối trộn, kết nối hai quan hệ đã sắp xếp trên thuộc tính kết nối. Nếu là kết nối bằng, chi phí của việc kết nối hai quan hệ được lưu trữ trên n1 và n2 bộ bản ghi là n1 + n2. V vậy, phương pháp này luôn được chọn khi có kết nối bằng, và khi các quan hệ được sắp xếp trước. Nếu chỉ một ho c không có quan hệ nào được sắp xếp, chi phí của vòng l p lồng nhau được so sánh với chi phí của phương pháp trộn + chi phí sắp xếp. Chi phí sắp xếp n bộ bản ghi là nlog2n.

Thuật toán tối ưu hoá System R (R-QOA), gồm hai vòng l p [7]:

- Chọn phương pháp truy nhập quan hệ đơn tốt nhất tới mỗi quan hệ trong truy vấn.

- Xét tất cả các hoán vị có thể của thứ tự kết nối (có n! hoán vị với n quan hệ) và chọn chiến lược truy nhập tốt nhất đối với câu truy vấn. Các hoán vị được đưa ra bởi cấu tr c động của cây các chiến lược luân phiên.

Thuật toán: R-QOA

Input: QT: Cây truy vấn với n quan hệ Output: Output: kết quả thực hiện 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_APi ο APij với chi phí tối thiểu

endfor

for mỗi order(Ri1,Ri2,...,Rin) với i=1,..., n! do

begin

build strategy(...((best APi1  Ri2)  Ri3) ... Rin) tính toán chi phí của chiến lược

endfor

output ← Chiến lược với chi phí tối thiểu

End. {R-QOA}

Ví dụ 2.8: Thuật toán R-QOA cho câu truy vấn q1 (trong ví dụ 2.6) Đồ thị kết nối của q1 như sau:

KYSU index trên SHKS HOSODA index trên SHDA (adsbygoogle = window.adsbygoogle || []).push({});

DUAN index trên SHDA và TENDA

Giả sử vòng l p ngoài chọn hướng truy nhập quan hệ đơn tốt nhất sau: KYSU: Quét tuần tự (v không có phép chọn trên KYSU)

HOSODA: Quét tuần tự (v không có phép chọn trên HOSODA)

DUAN: index trên TENDA (v có một phép chọn trên HOSODA dựa trên TENDA)

Cấu tr c động của cây các chiến lược luân phiên như h nh 2.9. Các phép toán có đánh dấu "loại bỏ" sẽ được loại bỏ tự động. Mức 1 của cây chỉ ra phương pháp truy nhập tốt nhất. Mức 2 chỉ ra phương pháp kết nối tốt nhất. Các chiến lược (KYSU × DUAN) và (DUAN × KYSU) bị loại bỏ. Giả sử (KYSU  HOSODA) và (HOSODA  DUAN) có chi phí cao hơn (HOSODA  KYSU) và (DUAN  HOSODA) tương ứng. Như vậy ch ng có thể bị loại bỏ, v bằng cách hoán vị có các thứ tự kết nối tương ứng tốt hơn. Mức 3 đưa ra hai khả năng còn lại, thứ tự kết nối tốt nhất là chi phí ít nhất của ((HOSODA  KYSU)  DUAN) và ((DUAN  HOSODA)

 KYSU). Cuối cùng dựa vào chỉ dẫn trên thuộc tính chọn và truy nhập trực tiếp tới các bộ kết nối của HOSODA và KYSU, chọn phương pháp truy nhập sau:

2.5. Kết luận

Hình 2.9: Các thứ tự kết nối luân phiên

Trong chương này đã tr nh bày hai kỹ thuật tối ưu hóa câu truy vấn dựa trên việc sắp xếp lại các phép toán và phân rã câu truy vấn thành những câu truy vấn con. Việc kết hợp các kỹ thuật với nhau và phát triển trên mô h nh phân tán sẽ được tr nh bày trong chương sau.

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 30)