Thuật toỏn System R

Một phần của tài liệu tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (Trang 46 - 106)

6. Cỏc kết quả dự kiến

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".

Thuật toỏn tối ưu bao gồm hai bước chớnh:

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

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ốị 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ốị 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

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

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:

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)

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à

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

(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ờ

2.5. 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ệụ 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ừạ Giai đoạn này chia làm 4 bước [3]:

2.5.1 Chuẩn hoỏ

Mục đớch: chuyển đổi truy vấn thành một dạng chuẩn để thuận lợi cho cỏc xử lý

tiếp theọ

Với SQL, cú hai dạng chuẩn cho cỏc tõn từ trong mệnh đề WHERE là:

Dạng chuẩn hội là hội () của những phộp toỏn tuyển (): (p11 p12 ...  p1n)  ...  (pm1 pm2 ...  pmn)

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

(p11  p12  ...  p1n)  ...  (pm1  pm2  ... pmn), trong đú pij là cỏc biểu thức nguyờn tố.

Vớ dụ 2.9: Xột cỏc lược đồ quan hệ sau: KYSU(SHKS, TENKS, NGHE) HOSODĂSHKS, SHDA, TRNH, THOIGIAN)

DUAN(SHDA, TENDA, NGANSACH) Trong đú: SHKS: Số hiệu kỹ sư TENKS: Tờn kỹ sư SHDA: Số hiệu dự ỏn TENDA: Tờn dự ỏn. TRNH : Trỏch nhiệm

Cõu truy vấn : "Tỡm tờn kỹ sư làm việc cho dự ỏn J1 12 hoặc 24 thỏng” SELECT TENKS

FROM KYSU, HOSODA

WHERE KYSỤSHKS=HOSODẠSHKS AND HOSODẠSHDA= “J1”

AND THOIGIAN = 12 OR THOIGIAN = 24 Điều kiện tỡm kiếm theo dạng chuẩn hội là:

KYSỤSHKS = HOSODẠSHKS  HOSODẠSHDA = “J1” (THOIGIAN = 12 THOIGIAN = 24).

Điều kiện theo dạng chuẩn tuyển là:

(KYSỤSHKS = HOSODẠSHKS HOSODẠSHDA = “J1” THOIGIAN = 12) (KYSỤSHKS = HOSODẠSHKS HOSODẠSHDA = “J1” THOIGIAN = 24)

Trong dạng chuẩn tuyển, xử lý hai biểu thức hội độc lập cú thể dẫn đến cụng việc thừa nếu cú biểu thức con chung.

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

2.5.2 Phõn tớch

Mục đớch: Phỏt hiện ra những thành phần khụng đỳng (sai kiểu hoặc sai ngữ

nghĩa) và loại bỏ chỳng sớm nhất nếu cú thể.

Truy vấn sai kiểu: nếu một thuộc tớnh bất kỳ hoặc tờn quan hệ của nú khụng

được định nghĩa trong lược đồ tổng thể, hoặc phộp toỏn ỏp dụng cho cỏc thuộc tớnh sai kiểụ

Một cõu truy vấn sai ngữ nghĩa nếu cỏc thành phần của nú khụng tham gia vào việc tạo ra kết quả. Để xỏc định một cõu truy vấn cú sai ngữ nghĩa hay khụng, ta dựa trờn việc biểu diễn cõu truy vấn như một đồ thị, gọi là đồ thị cõu truy vấn hoặc đồ thị nốị Đồ thị này xỏc định với cỏc cõu truy vấn cú liờn quan đến phộp chọn, chiếu và kết nốị Trong một đồ thị cõu truy vấn, một nỳt chỉ ra quan hệ kết quả cũn cỏc nỳt khỏc chỉ ra toỏn hạng quan hệ. Cạnh nối giữa hai nỳt khụng phải nỳt kết quả biểu diễn một phộp kết nối, cũn cạnh cú nỳt đớch là kết quả biểu diễn một phộp chiếụ Một nỳt khụng phải kết quả cú thể được gỏn nhón bởi phộp chọn hoặc phộp nữa kết nốị Một đồ thị con quan trọng của đồ thị cõu truy vấn là đồ thị kết nối, trong đú chỉ cỏc phộp kết nối được xem xột. Đồ thị này đặc biệt cú lợi trong lớp tối ưu hoỏ cõu truy vấn.

Vớ dụ 2.10: Với cỏc quan hệ tổng thể KYSU, HOSODA, DUAN đề cập trong phần trước: Xột cõu truy vấn “Tỡm tờn và trỏch nhiệm của người kỹ sư đang làm việc cho dự ỏn CAD/CAM hơn ba năm”.

SELECT TENKS, TRNH

FROM KYSU, HOSODA, DUAN WHERE KYSỤSHKS = HOSODẠSHKS AND HOSODẠSHDA = DUAN.SHDA AND TENDA=”CAD/CAM”

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

(a) Đồ thị cõu truy vấn

(b) Đồ thị kết nối tương ứng

Hỡnh 2.9: Cỏc đồ thị quan hệ

Đồ thị cõu truy vấn cú lợi để xỏc định sự sai ngữ nghĩa của một cõu truy vấn hội khụng cú phộp phủ định. Như vậy, một cõu truy vấn là sai ngữ nghĩa nếu đồ thị cõu truy vấn của nú khụng liờn thụng, nghĩa là cú một hoặc nhiều đồ thị con tỏch khỏi đồ thị chứa quan hệ kết quả. Cõu truy vấn cú thể được xem là chỉnh nếu loại bỏ những phần vụ ớch. Nhưng núi chung, vấn đề là ở chỗ thiếu cỏc tõn từ kết nối và cõu truy vấn trờn bị huỷ bỏ.

Vớ dụ 2.11:

SELECT TENKS, TRNH

FROM KYSU, HOSODA, DUAN

WHERE KYSỤSHKS = HOSODẠSHKS AND HOSODẠSHDA=DUAN.SHDA

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

AND TENDA=”CAD/CAM”

AND THOIGIAN  36 and NGHE=”lập trỡnh viờn”

Cõu truy vấn này cú ngữ nghĩa khụng chỉnh vỡ đồ thị của nú (hỡnh 3.2) khụng liờn thụng. Cú ba giải phỏp cơ bản cho vấn đề này:

- Huỷ bỏ cõu truy vấn

- Cho rằng việc truy nhập tới quan hệ DUAN là vụ ớch và loại bỏ tõn từ TENDA = “CAD/CAM” ra khỏi cõu truy vấn.

- Suy ra (sử dụng lược đồ) thiếu tõn từ kết nối HOSODẠSHDA = DUAN.SHDA để đưa về cõu truy vấn như ở vớ dụ 3.2

Hỡnh 2.10: Đồ thị cõu truy vấn khụng liờn thụng 2.5.3 Loại bỏ dư thừa

• Điều kiện trong cỏc truy vấn cú thể cú chứa cỏc tõn từ dư thừạ

• Một đỏnh giỏ sơ sài về một điều kiện dư thừa cú thể dẫn đến lặp lại một số cụng việc.

• Sự dư thừa tõn từ và dư thừa cụng việc cú thể được loại bỏ bằng cỏch làm đơn giản hoỏ cỏc điều kiện thụng qua cỏc luật luỹ đẳng sau:

1. p  p p 2. p  true  true 3. p  p p 4. p  p  false 5. p  true  p 6. p  p  true

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

7. p  false  p 8. p1  (p1  p2)  p1 9. p  false  false 10.p1  (p1  p2)  p1 Vớ dụ 2.12: Xột cõu truy vấn SQL sau:

SELECT NGHE FROM KYSU

WHERE (NOT(NGHE=”Lập trỡnh viờn”)

AND ((NGHE=”Lập trỡnh viờn”) OR (NGHE = “KS điện tử”)) AND NOT(NGHE=”KS điện tử”))

OR TENKS = “J.Doe”

Sử dụng cỏc luật luỹ đẳng đú để đơn giản cõu truy vấn này: SELECT NGHE

FROM KYSU

WHERE TENKS=”J.Doe”

Gọi p1 là <NGHE = “Lập trỡnh viờn”>, p2 là <NGHE= “KS điện tử”>, p3 là <TENKS = “J.Doe”>. Điều kiện cõu truy vấn là:

(p1 (p1 p2)p2) p3

 (p1 p1 p2) (p1 p2p2) p3 (Áp dụng pp false)

 (falsep2) (p1 false) p3 (Áp dụng pfalse false)

false false p3 (Áp dụng p false p)

p3

2.5.4 Viết lại

Bước cuối cựng của phõn ró cõu truy vấn là viết lại cõu truy vấn dưới dạng đại số quan hệ. Cú thể được chia làm hai bước sau:

- Biến đổi trực tiếp cõu truy vấn phộp tớnh quan hệ sang đại số quan hệ. - Cấu trỳc lại cõu truy vấn đại số quan hệ để cải tiến hiệu năng.

Để cho rừ ràng, thụng thường người ta biểu diễn cõu truy vấn đại số quan hệ bởi một cõy đại số quan hệ. Một cõy đại số quan hệ là một cõy trong đú một nỳt lỏ biểu diễn một quan hệ trong cơ sở dữ liệu, cũn một nỳt khỏc nỳt lỏ biểu diễn một quan hệ trung gian sinh bởi một phộp toỏn đại số quan hệ. Dóy cỏc phộp toỏn trực tiếp từ lỏ đến gốc biểu diễn lời giải của cõu truy vấn.

Sự biến đổi từ cõu truy vấn trong phộp tớnh quan hệ bộ thành cõy đại số quan hệ được thực hiện như sau:

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

quan hệ). Trong SQL, cỏc nỳt lỏ chớnh là cỏc quan hệ trong mệnh đề FROM.

- Nỳt gốc được tạo ra xem như một phộp chiếu lờn cỏc thuộc tớnh kết quả. Trong SQL, nỳt gốc được tỡm thấy trong mệnh đề SELECT.

- Điều kiện (mệnh đề WHERE trong SQL) được biến đổi thành dóy cỏc phộp toỏn đại số thớch hợp (phộp chọn, kết nối, phộp hợp,…) đi từ lỏ tới gốc, cú thể theo thứ tự xuất hiện của cỏc tõn từ và cỏc phộp toỏn.

Vớ dụ 2.13: Với cỏc quan hệ tổng thể KYSU, HOSODA, DUAN đề cập trong phần trước: Xột cõu truy vấn: “Tỡm tờn cỏc nhõn viờn khỏc J.Doe làm việc cho dự ỏn CAD/CAM một hoặc hai năm”.

SELECT TENKS

FROM DUAN, HOSODA, KYSU

WHERE HOSODẠSHKS = KYSỤSHKS AND HOSODẠSHDA = DUAN.SHDA

AND TENKS  “J.Doe” and TENDA = “CAD/CAM” AND (THOIGIAN = 12 or THOIGIAN = 24)

Cõy đại số quan hệ tương ứng như sau:

Hỡnh 2.11: Cõy đại số quan hệ

Cú thể biến đổi cõy thành cỏc cõy tương ứng nhờ cỏc qui tắc đó trỡnh bày trong chương II (mục biến đổi đại số). Vớ dụ cõy hỡnh 2.12 tương đương cõy hỡnh 2.11. Tuy nhiờn cõy hỡnh 2.12 chứa tớch Decartes, nờn chi phớ thực hiện cú thể lớn hơn cõy ban đầụ

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

Hỡnh 2.12: Cõy đại số quan hệ tương đương

Trong giai đoạn tối ưu, cú thể so sỏnh tất cả cỏc cõy cú thể cú dựa trờn chi phớ dự đoỏn của chỳng. Tuy nhiờn, nếu số lượng cỏc cõy cú thể quỏ lớn sẽ dẫn đến cỏch tiếp cận này khụng khả thị Cỏc quy tắc trờn cú thể đựơc dựng để cấu trỳc lại cõy để loại bỏ những cõy đại số quan hệ “tồi”. Cỏc quy tắc đú cú thể sử dụng theo bốn cỏch khỏc nhau:

- Phõn ró cỏc phộp toỏn một ngụi, đơn giản hoỏ biểu thức cõu truy vấn. - Nhúm cỏc phộp toỏn một ngụi trờn cựng một quan hệ để giảm số lần thực hiện.

Giao hoỏn cỏc phộp toỏn một ngụi với cỏc phộp toỏn hai ngụi để ưu tiờn cho một số phộp toỏn (chẳng hạn phộp chọn).

- Sắp thứ tự cỏc phộp toỏn hai ngụi trong thực thi cõu truy vấn.

Vớ dụ 2.15: Cấu trỳc lại cõy trong hỡnh 2.12, cho cõy kết quả tốt hơn cõy ban đầu, tuy nhiờn vẫn cũn xa tối ưụ

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

2.6. Định vị dữ liệu phõn tỏn

• Lớp định vị biến đổi một truy vấn đại số quan hệ tổng thể thành một truy vấn đại số được biểu thị trờn cỏc mảnh vật lý.

• Sử dụng thụng tin được lưu trữ trờn cỏc lược đồ phõn mảnh để định vị. • Chương trỡnh đại số quan hệ xõy dựng lại quan hệ tổng thể từ cỏc phõn

mảnh của nú gọi là chương trỡnh định vị.

• Truy vấn cú được từ chương trỡnh định vị gọi là truy vấn ban đầụ

• Trong phần dưới đõy, với mỗi kiểu phõn mảnh chỳng ta sẽ biểu diễn

một kỹ thuật rỳt gọn để sinh ra truy vấn được tối ưu và đơn giản hoỏ.

2.6.1 Rỳt gọn phõn đoạn ngang nguyờn thuỷ

Phõn đoạn ngang tỏch một quan hệ dựa trờn cỏc tõn từ chọn

Vớ dụ 2.16: Quan hệ KYSU(SHKS, TENKS, NGHE) được tỏch thành 3 phõn đoạn ngang KYSU1, KYSU2, KYSU3 như sau:

KYSU1= SHKS ≤ “E3”(KYSU)

KYSU2= ”E3”<SHKS ≤ “E6”(KYSU)

KYSU3= SHKS > “E6”(KYSU)

Chương trỡnh định vị cho một quan hệ đó được phõn đoạn ngang là hợp của cỏc đoạn: KYSU = KYSU1 KYSU2 KYSU3

Như vậy, dạng ban đầu của bất kỳ cõu truy vấn nào xỏc định trờn KYSU là cú được bằng cỏch thay thế nú bởi (KYSU1 KYSU2 KYSU3 ).

Việc rỳt gọn cỏc cõu truy vấn trờn cỏc quan hệ đó được phõn đoạn ngang bao gồm việc xỏc định, sau khi đó cấu trỳc lại cỏc cõy con, cỏc cõy con đú sẽ sinh ra cỏc quan hệ rỗng và loại bỏ chỳng. Phõn đoạn ngang cú thể được khai thỏc để làm đơn giản cả hai phộp chọn và kết nốị

Rỳt gọn với phộp chọn: R được phõn đoạn ngang thành R1, R2, …,Rw‟: Rj=pj(R)

Luật 1:

pj(Rj) =nếu x € R:(pi(x) pj(x))

Trong đú pi, pj: tõn từ chọn, x: bộ dữ liệu, p(x): tõn từ p đỳng với x Vớ dụ 2.17:

Số húa bởi Trung tõm Học liệu – Đại học Thỏi Nguyờn http://www.lrc-tnụedụvn

SELECT * FROM KYSU WHERE SHKS=”E5”

Cõu truy vấn ban đầu tương ứng với hỡnh 2.14a, bằng cỏch giao hoỏn phộp chọn với phộp hợp để tỡm ra cỏc quan hệ rỗng, ta được cõu truy vấn rỳt gọn hỡnh 2.14b.

(a) Cõu truy vấn ban đầu (b) Cõu truy vấn rỳt gọn

Hỡnh 2.14: Rỳt gọn cho phõn đoạn ngang với phộp chọn

Một phần của tài liệu tối ưu hóa truy vấn trong cơ sở dữ liệu phân tán (Trang 46 - 106)