5. Các kết quả dự kiến đạt đƣợc
2.3.1 thị nối các quan hệ
Đồ thị nối các quan hệ là đồ thị trong đó mỗi đỉnh là một quan hệ, các cung nối giữa các đỉnh được xác định như sau:
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
nối) ta biểu diễn trên đồ thị một khuyên tại đỉnh Ri, trên đó ghi các phép chọn dạng trên.
Nếu hai quan hệ Ri và Rj có các phép kết nối dạng Rj.A Rj.B, ta biểu diễn trên đồ thị bằng cung nối 2 đỉnh Ri và Rj trên đó ghi các phép nối dạng trên.
Ví dụ 2.3. Với cơ sở dữ liệu thư viện trên, xét câu truy vấn: "Tìm tên những cuốn sách và tên độc giả đã mượn sách trước ngày 1/1/2004". Đồ thị nối các quan hệ như sau:
Hình 2.4: Đồ thị nối các quan hệ 2.3.2. Tách câu truy vấn thành các câu truy vấn con
Phương pháp này thực hiện việc tách một câu truy vấn phức tạp Q thành các câu truy vấn con Q1, Q2, ..., Qm mà giữa các câu truy vấn này có quan hệ ràng buộc với nhau.
Việc tách các câu truy vấn phức tạp thành các câu truy vấn con làm đơn giản việc tính kết quả câu truy vấn và làm giảm kích thước của các kết quả trung gian trong quá trình tính toán. Hơn nữa, trong các hệ phân tán, việc tách câu truy vấn thành các câu truy vấn con sẽ làm tăng khả năng xử lý câu truy vấn vì các câu truy vấn con có thể được xử lý tại các máy trạm và sử dụng dữ liệu cục bộ.
Ví dụ 2.4: Để thực hiện câu truy vấn ở ví dụ 2.3, ta tách thành các câu truy vấn con như sau:
Q1: "Tìm trong quan hệ MUON những số hiệu sách đã cho mượn trước ngày 1/1/2004" giả sử kết quả là R1.
Q2: "Tìm trong quan hệ DOCGIA những độc giả đã mượn những cuốn sách có trong R1", quan hệ kết quả R2.
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
Q3: "Tìm trong quan hệ SACH những cuốn sách đã cho mượn trong R2", quan hệ kết quả R3.
Kết quả câu truy vấn: "Chọn tên những cuốn sách trong R3".
2.3.3 Dùng phép nửa kết nối để giảm kích thước quan hệ
Vì phép kết nối và tích Decartes tốn nhiều thời gian và bộ nhớ trong khi nhiều yêu cầu của câu truy vấn chỉ dùng nửa kết nối.
Để thực hiện câu truy vấn sử dụng phép nửa kết nối, đầu tiên trên đồ thị nối các quan hệ ta phải khử các khuyên bằng cách thực hiện phép chọn trên các quan hệ. Sau đó sử dụng phép nửa kết nối để nối các cặp quan hệ có cung nối với nhau.
Ví dụ 2.5: Sử dụng câu truy vấn trong ví dụ 2.3. Khử các khuyên của đồ thị nối các quan hệ ta được.
Hình 2.5: Đồ thị nối các quan hệ
Thực hiện các phép nửa kết nối giữa hai đỉnh của đồ thị có cung nối: R1 = DOCGIA ⋉DOCGIA.SOTHE =MUON.SOTHEMUON
R2 = R1⋉R1.SHTV = SACH.SHTV SACH Kết quả =R2..TENSACHR2
Chú ý: Với những đồ thị nối các quan hệ có chu trình, ta không thể dùng phép nửa kết nối như trên, khi đó ta dùng phương pháp thay thế n-bộ.
2.3.4 Phương pháp thay thế n-bộ
Trường hợp đồ thị nối có chu trình, để khử một chu trình trong đồ thị ta lấy một quan hệ là một đỉnh của chu trình (chẳng hạn Ri trong hình 2.6) và duyệt tuần
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
tự từng bộ trong Ri. ứng với mỗi bộ ta có một câu truy vấn con mà chu trình đã được gỡ bỏ (hình 2.7). Hợp tất cả kết quả của các câu truy vấn con sẽ cho ta kết quả của câu truy vấn. Thông thường ta chọn Ri là quan hệ có ít bộ nhất để giảm số câu truy vấn con cần thực hiện.
Hình 2.6: Đồ thị nối các quan hệ có chu trình
Hình 2.7. Gỡ bỏ chu trình bằng cách thay thế n - bộ
2.4 Các kỹ thuật tối ƣu hóa tập trung
Phần này sẽ trình bày 2 kỹ thuật tối ưu hoá câu truy vấn đối với hệ tập trung. Sự biểu diễn này là điều kiện để tối ưu hóa câu truy vấn phân tán với ba lý do:
- Một câu truy vấn phân tán được biến đổi thành các câu truy vấn địa phương được xử lý theo cách tập trung.
- Các kỹ thuật tối ưu hoá câu truy vấn phân tán thường là sự mở rộng các kỹ thuật đối với hệ tập trung.
- Tối ưu hoá tập trung thường là vấn đề đơn giản, sự tối thiểu hoá chi phí truyền thông dẫn đến tối ưu hoá câu truy vấn phân tán phức tạp hơn.
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
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 <Avalue> 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:
SELECT V2.A2, V3.A3,...., Vn.An
FROM R1 V1, R2 V2,..., Rn Vn
WHERE P1(V1.A1')
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)
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
Trong đó:R‟1 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
THOIGIAN: Thời gian được giao theo tháng
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;
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
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 q11q12q13. 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:
- 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), t1iR1} 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
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
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[7].
Thuật toán: INGRES-QOA
Input: MVQ: Truy vấn đa biến với n biến Output: output: Kết quả thực hiện
Begin
output
if n=1 then
outputrun(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 1to m do
begin
output' run(OVQi) {Thực thi OVQi}
outputoutput output' {hợp tất cả các kết quả} endfor
VCHOOSE-VARIABLE(MVQ') {V được chọn cho phép thế bộ} formỗi bộ t V do
begin
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
Endif
End.
2.4.2 Thuật toán 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
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".
Thuật toán tối ưu bao gồm hai bước chính:
- 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
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
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
outputChiế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:
Hình 2.8: Đồ thị kết nối của câu truy vấn q1
KYSU index trên SHKS HOSODA index trên SHDA
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)
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
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 (KYSUDUAN) 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:
Hình 2.9: Các thứ tự kết nối luân phiên 2.5 Kết luậ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.
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
Chƣơng 3. TỐI ƢU HÓA TRUY VẤN PHÂN TÁN 3.1 Phân rã câu truy vấn
Phân rã truy vấn biến đổi một câu truy vấn các phép tính quan hệ thành câu truy vấn đại số trên các quan hệ tổng thể. Cả hai câu truy vấn vào và ra đều trên các quan hệ tổng thể và không quan tâm đến tính phân tán của dữ liệu. Vì vậy, phân rã câu truy vấn là chung cho cả quan hệ tập trung và phân tán. Trong phần này, giả sử câu truy vấn vào là đúng đắn (chỉnh). Khi việc phân rã được thực hiện xong câu truy vấn ra là chỉnh và tránh được các công việc dư thừa. Giai đoạn này chia làm 4 bước [3]:
3.1.1 Chuẩn hoá
Mục đích của chuẩn hoá là biến đổi câu truy vấn về dạng chuẩn để thuận lợi cho các xử lý tiếp theo. Với các ngôn ngữ quan hệ như SQL, có hai dạng chuẩn cho tân từ trong mệnh đề WHERE
Dạng chuẩn hội (conjunctive normal form) là hội () của những phép tuyển (): (p11 p12 p13 ... p1n)…(pm1 pm2 pm3 ... pmn) trong đó pij là công thức nguyên tố.
Dạng chuẩn tuyển (disjunctive normal form) là tuyển () của những phép hội (): (p11 p12 p13 ... p1n)… (pm1 pm2 pm3 … pmn) .
Phép biến đổi của tân từ không có lượng từ (,) là dễ dàng, sử dụng các qui tắc tương đương đối với các phép toán logic ((,, vµ) đã biết.
Ví dụ 3.1: Xét các lược đồ quan hệ sau: