Quá trình xử lý truy vấn

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

Quá trình xử lý truy vấn bao gồm 4 tầng: Phân rã truy vấn, cục bộ hóa dữ liệu, tối ƣu hóa toàn cục và tối ƣu hóa cục bộ (xem Hình 2.3) [4].

Phân rã truy vấn và cục bộ hóa dữ liệu tƣơng ứng với việc viết lại truy vấn. Chức năng của ba tầng đầu tiên đƣợc thực hiện tại một vị trí tập trung và sử dụng các thông tin toàn cục, còn chức năng của tầng thứ 4 đƣợc thực hiện ở vị trí cục bộ.

Hình 2.3: Sơ đồ quy trình xử lý truy vấn [4] 2.2.1. Phân rã truy vấn

Phân rã truy vấn là giai đoạn đầu tiên của quá trình xử lý câu truy vấn, thực hiện việc biến đổi câu truy vấn ở dạng ngôn ngữ bậc cao thành câu truy vấn ngôn ngữ bậc thấp thực thi cho kết quả tƣơng đƣơng. Đặc trƣng của giai đoạn này, khi biến đổi không sử dụng các thông tin về dữ liệu đã đƣợc phân tán trên các vị trí.

Phân rã truy vấn

Truy vấn dạng đại số trên các quan hệ phân tán

Cục bộ hóa dữ liệu

Truy vấn theo mảnh

Tối ƣu hóa toàn cục

Truy vấn theo mảnh đã tối ƣu. Với các phép toán truyền

Tối ƣu hóa cục bộ

Truy vấn cục bộ đã tối ƣu

Lƣợc đồ toàn cục Lƣợc đồ mảnh Số liệu trên các mảnh Lƣợc đồ cục bộ Các vị trí cục bộ Vị trí điều khiển

Vì thế, phân rã truy vấn đều giống nhau trong cả hệ thống tập trung và phân tán, câu truy vấn sẽ đúng về ngữ nghĩa và đạt chất lƣợng theo nghĩa là đã loại bỏ các hành động không cần thiết. Phân rã truy vấn bao gồm bốn bƣớc liên tiếp: Chuẩn hoá, phân tích, loại bỏ dƣ thừa, viết lại câu truy vấn.

- Chuẩn hóa: Các câu truy vấn bằng các phép tính quan hệ đƣợc viết lại dƣới dạng chuẩn tắc thích hợp cho các bƣớc tiếp theo. Sự chuẩn hóa một câu truy vấn bao gồm đặt các lƣợng tử và lƣợng tử hóa truy vấn bằng cách áp dụng độ ƣu tiên các toán tử logic.

- Phân tích: Câu truy vấn đã chuẩn hóa đƣợc phân tích về mặt ngữ nghĩa nhằm loại bỏ các câu truy vấn sai càng sớm càng tốt. Tìm ra truy vấn sai chỉ tồn tại với một tập con các phép tính quan hệ. Thông thƣờng sử dụng một loại đồ thị để nắm bắt ngữ nghĩa của câu truy vấn.

- Loại bỏ dƣ thừa: Câu truy vấn đúng đƣợc đơn giản hóa bằng cách loại bỏ các phụ thuộc dƣ thừa. Truy vấn dƣ thừa chỉ xuất hiện khi một truy vấn là kết quả của việc biến đổi hệ thống đƣợc áp dụng cho truy vấn của ngƣời sử dụng.

- Xây dựng lại câu truy vấn: Câu truy vấn phép tính quan hệ đƣợc xây dựng lại dƣới dạng truy vấn đại số quan hệ bằng các quy tắc biến đổi.

2.2.1.1. Chuẩn hóa câu truy vấn

Mục đích của chuẩn hoá (normalization) là biến đổi câu truy vấn thành một dạng chuẩn để xử lý tiếp. Chuẩn hoá một truy vấn nói chung gồm có đặt các lƣợng từ và lƣợng từ hoá vấn tin bằng cách áp dụng độ ƣu tiên của các toán tử logic.

Với các ngôn ngữ quan hệ nhƣ SQL, biến đổi quan trọng nhất là lƣợng từ hoá vấn tin (mệnh đề Where), có thể đó là một vị từ phi lƣợng từ với độ phức tạp nào đó với tất cả các lƣợng từ cần thiết ( hoặc ) đƣợc đặt phía trƣớc. Có hai dạng chuẩn có thể cho vị từ, một có thứ bậc cao cho AND () và loại còn lại cho OR ().

-Dạng chuẩn hội là hội (vị từ ) của các tuyển vị từ (các vị từ ): (p11  p12 …. p1n)  ….. (pm1 pm2 …. pmn)

Trong đó pij là một vị từ đơn giản (nguyên tố). -Ngƣợc lại, một lƣợng từ hoá ở dạng chuẩn tuyển nhƣ sau: (p11  p12 …. p1n)  …. (pm1 pm2 …. pmn)

Trong dạng chuẩn tắc tuyển, câu truy vấn có thể đƣợc xử lý nhƣ các câu truy vấn con hội độc lập, đƣợc nối bằng phép hợp (tƣơng ứng với các tuyển mệnh đề).

Dạng chuẩn tuyển ít đƣợc dùng vì dẫn đến các vị từ nối và chọn trùng nhau. Dạng chuẩn hội hay dùng trong thực tế.

Ví dụ 2.3: Tìm tên các nhân viên đang làm việc ở dự án P1 trong 12 tháng hoặc 24 tháng.

Câu truy vấn đƣợc diễn tả bằng SQL nhƣ sau: SELECT TênNV

FROM NV, PC

WHERE NV.MNV = PC.MNV AND PC.MDA = “P1”

AND Thời gian =12 OR Thời gian =24 Lƣợng từ hoá ở dạng chuẩn hội là:

NV.MNV = PC.MNV  PC.MDA = “P1”  (Thời gian = 12  Thời gian = 24) Lƣợng từ hoá ở dạng chuẩn tuyển là: (adsbygoogle = window.adsbygoogle || []).push({});

(NV.MNV = PC.MNV  PC.MDA = ”P1”  Thời gian = 12) 

(NV.MNV = PC.MNV  PC.MDA = ”P1”  Thời gian = 24)

Ở dạng sau, xử lý hai hội độc lập có thể là một công việc thừa nếu các biểu thức con chung không đƣợc loại bỏ.

2.2.1.2. Phân tích câu truy vấn

Phân tích câu truy vấn cho phép loại bỏ các câu truy vấn đã chuẩn hoá nhƣng không thể tiếp tục xử lý đƣợc hoặc không cần thiết, do chúng sai kiểu hoặc sai ngữ nghĩa.

-Một câu truy vấn gọi là sai kiểu nếu có một thuộc tính hoặc tên quan hệ chƣa đƣợc khai báo trong lƣợc đồ toàn cục hoặc nếu áp dụng cho các thuộc tính có

kiểu không thích hợp. Ví dụ: Select MaDA From TenNV >200

Câu truy vấn trên sai kiểu do TenNV có kiểu chuỗi (String) không thể so sánh với kiểu số (200) đƣợc.

-Một câu truy vấn gọi là 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ả.

Nếu các truy vấn không chứa các tuyển và phủ định ta có thể dùng đồ thị truy vấn. Truy vấn chứa phép chọn, nối, chiếu.

-Biểu diễn bằng đồ thị truy vấn: + Một nút biểu thị quan hệ kết quả

+ Các nút khác biểu thị cho quan hệ toán hạng

+ Đƣờng nối giữa hai nút không phải là quan hệ kết quả biểu thị cho phép kết nối

+ Đƣờng mà nút đích là kết quả sẽ biểu thị cho phép chiếu.

+ Các nút không phải là kết quả sẽ đƣợc gán nhãn là một vị từ chọn hoặc vị từ tự kết nối (chính nó).

-Đồ thị nối: Một đồ thị con quan trọng của đồ thị truy vấn, chỉ có các nối.

Ví dụ 2.4: Cho các quan hệ sau:

PC (MaNV, MaDA, NVụ, Tgian) NV (MaNV, TênNV, CVụ)

DA (MaDA, TênDA, Kphí, Đđiểm)

Câu truy vấn “Tìm tên, nhiệm vụ các của những ngƣời có Cvụ = ‟TP‟ đã làm việc ở dự án „CAD/CAM‟ trong hơn 3 năm” đƣợc viết dƣới dạng SQL nhƣ sau:

Select TênNV From PC, NV,DA

Where PC.MaNV = NV.MaNV and PC.MaDA = DA.MaDA and TênDA = ‟CAD/CAM‟ and CVụ = ‟TP‟ and tgian > 36

Ta có, các vị từ đơn giản:

p1: PC.MaNV = NV.MaNV p2: PC.MaDA=DA.MaDA

p3: TênDA=‟CAD/CAM‟ p4: CVụ =‟TP‟ p5: tgian >36 Ta có đồ thị truy vấn và đồ thị nối nhƣ Hình 2.4 Đồ thị truy vấn Đồ thị nối Hình 2.4: Đồ thị truy vấn và Đồ thị nối Ví dụ 2.5: Xét câu truy vấn Select TênNV From PC, NV,DA

Where PC.MaNV = NV.MaNV and TênDA=‟CAD/CAM‟ and CVụ =‟TP‟ and tgian >36

Ta có đồ thị truy vấn và đồ thị nối nhƣ Hình 2.5

Đồ thị truy vấn Đồ thị nối

Hình 2.5: Đồ thị truy vấn và Đồ thị nối với câu truy vấn sai ngữ nghĩa P C N V DA KQ P1 P2 P3 P5 P4 P C N V D A P C N V D A K Q P1 P3 P5 P4 P C N V D A

=> Đồ thị không liên thông. Điều này có nghĩa là câu truy vấn này sai ngữ nghĩa. Nhận xét: Câu truy vấn sai ngữ nghĩa nếu đồ thị truy vấn của nó không liên thông: Một hoặc nhiều đồ thị con bị tách rời với đồ thị kết quả. (adsbygoogle = window.adsbygoogle || []).push({});

2.2.1.3. Loại bỏ dƣ thừa

Một câu truy vấn của ngƣời sử dụng thƣờng đƣợc diễn tả trên một khung nhìn có thể đƣợc bổ sung thêm nhiều vị từ để có đƣợc sự tƣơng ứng khung nhìn - quan hệ, bảo đảm đƣợc tính toàn vẹn ngữ nghĩa và bảo mật. Thế nhƣng lƣợng từ hoá truy vấn đã đƣợc sửa đổi này có thể chứa các vị từ dƣ thừa, có thể phải khiến lặp lại một số công việc. Một cách làm đơn giản truy vấn là loại bỏ các vị từ thừa.

Loại bỏ vị từ dƣ thừa bằng quy tắc luỹ đẳng:

1. p ʌ p  p 6. p v True  True 2. p v p  p 7. p ʌ  p  False 3. p ʌ True  p 8. p v  p  True 4. p v False  p 9. p1 ʌ (p1v p2)  p1 5. p ʌ False  False 10. p1 v (p1 ʌ p2)  p1

Ví dụ 2.6: Xét câu truy vấn sau:

Select CVụ From NV

Where (Not (CVụ =‟TP‟) and (CVụ=‟TP‟ or CVụ=‟PP‟) and not (CVụ=‟PP‟)) or TênNV=‟Mai‟

Đặt:

p1: CVụ =‟TP‟

p2: CVụ=‟PP‟ p3: TênNV=‟Mai‟

Lƣợng từ hóa câu truy vấn trên, ta đƣợc: ( p1 ʌ (p1 v p2) ʌ  p2 ) v p3

áp dụng p ʌ (s v q)  (p ʌ s) v (p ʌ q): ( p1 ʌ ((p1 ʌ  p2 ) v (p2 ʌ  p2 ))) v p3

áp dụng quy tắc 3: ( p1 ʌ p1 ʌ  p2 ) v ( p1 ʌ p2 ʌ  p2 ) v p3

áp dụng quy tắc 5: False v False v p3 = p3

Tức là: Select CVụ From NV

where TênNV=‟Mai‟

2.2.1.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:

- Chuyển đổi câu truy vấn phép tính quan hệ sang đại số quan hệ. - Xây dựng lại câu truy vấn đại số quan hệ để cải tiến hiệu năng.

Để cho dễ hiểu, 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 các phép toán đại số quan hệ. Chuỗi các thao tác từ các nút lá đến nút gốc biểu diễn cho kết quả của câu truy vấn.

Biến đổi một câu truy vấn phép tính quan hệ thành một cây đại số quan hệ đƣợc thực hiện nhƣ sau:

- Các nút lá tƣơng ứng với các quan hệ trong mệnh đề FROM.

- Nút gốc đƣợc tạo ra nhƣ một phép chiếu chứa 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ừ nút lá tới gốc, có thể theo thứ tự xuất hiện của các vị từ và các toán tử.

Ví dụ 2.7: Xét câu truy vấn sau: “Tìm tên các nhân viên trừ J.Doe đã làm cho dự án CAD/CAM trong một hoặc hai năm”.

Biểu thức SQL là:

SELECT TênNV

FROM DA, PC, NV

AND PC.MDA=DA.MDA AND TênNV  “J.Doe”

AND DA.TênDA=”CAD/CAM” (adsbygoogle = window.adsbygoogle || []).push({});

AND (Thời gian=12 OR Thời gian=24) Cây đại số quan hệ nhƣ Hình 2.6:

Hình 2.6: Cây đại số quan hệ

Các quy tắc biến đổi cây đại số quan hệ:

Cho các quan hệ: R(A), A={A1, A2,…,An}; S(B), B={B1, B2,…,Bn} và T. Có thể nhận đƣợc các cây đại số quan hệ tƣơng đƣơng, áp dụng các quy tắc biến đổi sau:

1. Tính chất giao hoán của phép toán hai ngôi:

- Tích Đề các: R x S  S x R - Kết nối: R S  S R

TênNV

Thời gian=12  Thời gian=24 TênDA=”CAD/CAM” TênNV ”J.Doe” MDA MNV PC NV DA Chiếu Chọn Nối

- Hợp của hai quan hệ: R  S  S  R.

- Quy tắc này không đƣợc áp dụng cho hiệu và kết nối nửa.

2. Tính kết hợp của các phép toán hai ngôi

- Tích Đề các: (R x S) x T  R x (S x T) - Kết nối: (R S) T  R (S T)

3. Tính lũy đẳng của các phép toán đơn ngôi

Nếu R đƣợc định nghĩa trên tập thuộc tính A và A‟ A, A” A và A‟ A” thì A‟A‟(A” (R)) A‟(R)

p1(A1)(p2(A2)(R)) p1(A1) p2(A2)(R)

trong đó pi là một vị từ đƣợc áp dụng cho thuộc tính Ai

4. Giao hoán, phép chọn với phép chiếu

Phép chọn và chiếu trên cùng một quan hệ có thể đƣợc giao hoán nhƣ sau: A1…An(p(Ap)(R))  A1…An(p(Ap)(A1…An,Ap(R)))

Chú ý rằng nếu Ap là phần tử của {A1, A2,…,An} thì phép chiếu cuối cùng trên {A1, A2,…,An} ở vế phải của hệ thức không có tác dụng.

5. Giao hoán, phép chọn với phép toán hai ngôi

- Phép chọn và tích Đề các: p(Ai)(R x S)  (p(Ai)(R)) x S

- Phép chọn và kết nối: p(Ai)(R p(Aj, Bk) S)  (p(Ai)(R)) p(Aj, Bk) S - Phép chọn và hợp : p(Ai)(R  T) p(Ai)(R)  p(Ai)(T)

6. Giao hoán, phép chiếu với phép toán hai ngôi

Nếu C=A‟ B‟, trong đó A‟ A, B‟ B, và A, B là các tập thuộc tính tƣơng ứng của quan hệ R và S, chúng ta có

- C(R x S)  A(R)B(S)

- C(R p(Ai, Bj) S) A(R) p(Ai, Bj) B(S) -  (R  S)  (R)  (S)

Các quy tắc trên có thể đƣợc sử dụng để cấu trúc lại cây một cách có hệ thống nhằm loại bỏ các cây “xấu”. Một thuật toán tái cấu trúc đơn giản sử dụng heuristic trong đó có áp dụng các phép toán đơn ngôi (chọn/ chiếu) càng sớm càng tốt nhằm giảm bớt kích thƣớc của quan hệ trung gian.

Tái cấu trúc cây đại số quan hệ trong Ví dụ 2.7 sinh ra cây sau:

Hình 2.7: Cây đại số quan hệ sau khi tái cấu trúc

Kết quả đƣợc xem là đạt chất lƣợng theo nghĩa là nó tránh truy xuất nhiều lần đến cùng một quan hệ và các phép toán chọn nhiều nhất đƣợc thực hiện trƣớc tiên. (adsbygoogle = window.adsbygoogle || []).push({});

2.2.2. Cục bộ hóa dữ liệu phân tán

Cục bộ hóa dữ liệu chịu trách nhiệm dịch câu truy vấn đại số trên quan hệ toàn cục sang câu truy vấn đại số quan hệ trên các mảnh vật lý. Cục bộ hóa có sử dụng các thông tin đƣợc lƣu trong một lƣợc đồ phân mảnh.

Tầng này xác định xem những mảnh nào cần cho câu truy vấn và biến đổi câu PC TênNV MDA, TenNV MNV MDA, MNV MNV, TenNV MDA

TenDA=”CAD/CAM” Thoigian=12Thoigian=24

DA NV

truy vấn phân tán thành câu truy vấn trên các mảnh. Tạo ra câu truy vấn trên mảnh đƣợc thực hiện qua hai bƣớc:

-Truy vấn phân tán đƣợc ánh xạ thành truy vấn trên mảnh bằng cách thay thế mỗi quan hệ phân tán bằng chƣơng trình xây dựng lại có chứa các phép toán đại số quan hệ thao tác trên mảnh, gọi là chƣơng trình cục bộ hóa

-Truy vấn trên mảnh đƣợc đơn giản hoá và xây dựng lại để tạo ra một truy vấn khác tốt hơn. Quá trình đơn giản hoá và xây dựng lại có thể đƣợc thực hiện theo những quy tắc đƣợc sử dụng trong tầng phân rã.

2.2.2.1. Rút gọn cho phân mảnh ngang nguyên thủy

Phân mảnh ngang phân tán một quan hệ dựa trên các vị từ chọn. Ví dụ quan hệ NV (MaNV, TenNV, CVụ) đƣợc phân mảnh ngang thành:

- NV1 = MaNV  „E3‟(NV) - NV2 = ‟‟E3‟ < MaNV  „E6‟(NV) - NV3 = MaNV > „E6‟(NV)

Khi đó, chƣơng trình cục bộ hóa cho quan hệ phân mảnh ngang là hợp các mảnh: NV = NV1 NV2  NV3

Vì vậy, dạng truy vấn gốc đƣợc xác định trên NV sẽ thu đƣợc bằng cách thay NV bởi (NV1 NV2  NV3). Nhƣ vậy, để giảm các thao tác truy vấn trên quan hệ đã đƣợc phân mảnh ngang, trƣớc hết phải xác định rõ cần thao tác trên mảnh nào và sau đó xây dựng lại cây con, xem xét loại bỏ các quan hệ rỗng. Phân mảnh ngang sẽ đƣợc sử dụng để làm đơn giản hóa các phép chọn và phép kết nối.

Rút gọn phép chọn: Chọn trên các mảnh có lƣợng từ mâu thuẫn với lƣợng từ

hoá của quy tắc phân mảnh sẽ sinh ra quan hệ rỗng, ta loại bỏ chúng. Cho một quan hệ R đƣợc phân mảnh theo chiều ngang là Rj = pj (R), j = 1...n, quy tắc này có thể biểu diễn một cách hình thức nhƣ sau:

pj (Rj) =  nếu x thuộc R :  ( pi(x) ʌ pj(x)) Trong đó: pi, pj là các vị từ chọn, x là một bộ.

Vị từ MaNV = "E1" mâu thuẫn với các vị từ của mảnh NV2 và NV3, nghĩa là không có bộ nào thỏa mãn vì từ MaNV = "E1".

Xét câu truy vấn sau: Select MaNV

From NV

Where MaNV=‟E5‟

Áp dụng cách tiếp cận thô sơ để cục bộ hóa NV từ NV1, NV2 và NV3 cho câu truy vấn gốc trong Hình 2.8 bằng cách hoán vị phép chọn và phép hợp. Dễ dàng nhận thấy vị từ chọn mâu thuẫn với NV1 và NV3. Câu truy vấn đã rút gọn chỉ ứng dụng có một mảnh NV2 nhƣ trong Hình 2.9

Hình 2.8: Câu truy vấn gốc Hình 2.9: Câu truy vấn đã rút gọn

Rút gọn với phép kết nối: Phép kết nối thực hiện trên các phân mảnh ngang

có thể đơn giản khi kết nối dựa theo các thuộc tính kết nối, bằng cách phân phối kết nối trên các hợp và sau đó loại bỏ các kết nối không tác dụng. Việc phân phối các kết nối trên phép hợp đƣợc phát biểu nhƣ sau:

(R1 R2) S = (R1 S)  (R2 S)

Trong đó Ri là các mảnh của R và S là một quan hệ.

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