Rỳt gọn cho phõn mảnh ngang dẫn xuất

Một phần của tài liệu Thực hiện song song các câu vắn tin trong CSDL phân tán bằng cách sử dụng luồng (Trang 57 - 61)

Phộp nối là phộp toỏn quan trọng nhất vỡ nú thường gặp lại cú thể được tối ưu húa bằng cỏch dựng phõn mảnh ngang nguyờn thủy khi cỏc quan hệ nối được phõn mảnh theo cỏc thuộc tớnh nối. Trong trường hợp này, nối của hai quan hệ được cài đặt như hợp của cỏc nối thành phần. Tuy nhiờn phương phỏp này ngăn cản khụng cho một trong cỏc quan hệ phõn mảnh theo một phộp chọn trờn một thuộc tớnh khỏc. Phõn mảnh ngang dẫn xuất là một cỏch khỏc để phõn phối hai quan hệ mà nhờ đú cú thể cải thiện khả năng xử lý cỏc điểm giao nhau giữa phộp chọn và phộp nối. Điển hỡnh, nếu quan hệ R phải phõn mảnh dẫn xuất theo quan hệ S, thỡ cỏc mảnh của R và S cú giỏ trị giống nhau ở thuộc tớnh nối sẽ nằm cựng vị trớ. Ngoài ra, S cú thể được phõn mảnh theo vị từ chọn.

Bởi vỡ cỏc bộ của R được đặt tuỳ theo cỏc bộ của S, phõn mảnh dẫn xuất chỉ sử dụng cho mối liờn hệ 1 – n (phõn cấp) cú dạng S  R, trong đú một bộ của S cú thể khớp với nhiều bộ của R, nhưng một bộ của R chỉ khớp với đỳng một bộ của S. Chỳ ý rằng phõn mảnh ngang dẫn xuất cú thể được sử dụng cho cỏc mối liờn hệ nhiều - nhiều, với điều kiện là cỏc bộ của S là cỏc bộ khớp với nhiều bộ của R) được nhõn bản. Nhõn bản như thế gõy nhiều khú khăn cho việc duy trỡ tớnh nhất quỏn. Để đơn giản, chỳng ta gỉa thiết sử và khuyờn người sử dụng rằng phõn mảnh dẫn xuất chỉ nờn dựng cho mối liờn hệ phõn cấp.

Vớ dụ 2.2-12: Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])

Thấy rằng liờn hệ từ EMP(ENO, ENAME, TITLE) đến ASG(ENO, PNO,RESP, DUR) là 1-n.

Gử rằng EMP được phõn mảnh ngang thành EMPH1 và EMPH2 như sau: EMPH1 = TITLE = ” programmer ” (EMP)

Chương trỡnh cục bộ hoỏ phõn mảnh ngang là hợp của cỏc mảnh của nú. Tức là:

EMP = EMPH1EMPH2

Quan hệ ASG cú thể được phõn mảnh giỏn tiếp (phõn mảnh dẫn xuất (DX)) theo cỏc qui tắc sau:

ASGDXH1 = ASG EMPH1 ASGDXH2 = ASG EMPH2

Chương trỡnh cục bộ hoỏ cho quan hệ phõn mảnh ngang ASG là hợp của cỏc mảnh của nú. Tức:

ASG = ASGDXH1  ASGDXH2

Cỏc cõu vấn tin trờn cỏc mảnh dẫn xuất cũng cú thể được rỳt gọn. Bởi vỡ loại phõn mảnh này được sử dụng rất nhiều trong việc tối ưu húa cỏc cõu vấn tin nối, một biến đổi cú ớch là phõn phối cỏc nối trờn cỏc tập hợp (được dựng trong cục bộ húa) và ỏp dụng qui tắc 2 đó được trỡnh bày ở trờn. Bởi vỡ qui tắc phõn mảnh chỉ rừ cỏc bộ sẽ “khớp lại” với nhau, một số nối sẽ sinh ra quan hệ rỗng nếu cỏc vị trớ phõn mảnh cú mõu thuẫn. Vớ dụ cỏc vị từ của ASGH1 và EMPH2: Vỡ TITLE là khúa nờn cỏc giỏ trị ENO trong ASGDXH1 ứng với TITLE = ” programmer” khụng thể bằng với cỏc giỏ trị ENO trong EMPH2

ứng với TITLE  ” programmer” nờn mõu thuẫn và vỡ thế: ASGDXH1 ENO EMPH2 = 

Ngược lại với rỳt gọn bằng nối được thảo luận trước đõy, cõu vấn tin rỳt gọn luụn luụn được ưa chuộng hơn so với cõu vấn tin gốc bởi vỡ số lượng cỏc nối từng phần thường bằng với số mảnh của R.

Vớ dụ 2.2-13: Từ hệ CSDL Cụng ty Điện toỏn (trang 184 [3])

Rỳt gọn theo mảnh dẫn xuất được minh hoạ bằng cỏch dựng cõu vấn tin SQL truy xuất tất cả cỏc thuộc tớnh từ EMP và ASG cú cựng giỏ trị của ENO và chức vụ là TITLE = “Mech.Eng”.

ENO

SELECT *

FROM EMP, ASG

WHERE ASG.ENO = EMP.ENO AND TITLE = “Mech.Eng”

Cõu vấn tin gốc được thực thi trờn cỏc mảnh EMPH1, EMPH2, ASGH1, ASGH2 đó dịch nghĩa trước đõy được trỡnh bày trong hỡnh 2.2-7.

Bằng cỏch giao hoỏn dựng phộp chọn TITLE= Mech.Eng và phộp hợp  của nhỏnh bờn phải ta được kết quả hỡnh 2.2-8.

Do trong EMPH1chỉ cú cỏc bộ thỏa vị từ TITLE = ” programmer ” khụng cú bộ nào thỏa món TITLE = “Mech.Eng” nờn vị từ chọn mõu thuẫn với vị từ phõn mảnh EMPH1 và vỡ thế loại bỏ mảnh EMPH1. Kết quả được cõy ở hỡnh 2.2-9. Hỡnh 2.2-7. Vấn tin gốc của vớ dụ 2.2-13 TITLE= “Mech.Eng” EMPH1 EMPH2 ASGH1 TI TLE= Mech.Eng” ASGH2   ENO

Hỡnh 2.2-8. Vấn tin gốc đó được giao hoỏn

TITLE = “Mech.Eng” EMPH1 EMPH2 ASGDXH1 TITLE = Mech.Eng” ASGDXH2   ENO TITLE = “Mech.Eng”

Để tiếp tục phỏt hiện cỏc vị từ mõu thuẫn, chỳng ta dựng luật phõn phối giữa phộp nối và hợp:

R (S T) = 

Bõy giờ chỳng ta giao hoỏn phộp và phộp  sẽ được cõy trờn hỡnh 2.2-10.

Cõy con bờn trỏi nối hai mảnh ASGDXH1 , EMPH2 với cỏc vị từ mõu thuẫn do vị từ TITLE = “programmer” trong ASGDXH1 và TITLE 

“programmer” trong EMPH2. Vỡ thế chỳng ta cú thể loại bỏ nhỏnh bờn trỏi và thu được cõu vấn tin rỳt gọn của hỡnh 2.2-11. Vớ dụ này minh hoạ cho giỏ trị phõn mảnh trong việc cải thiện hiệu năng của cỏc cõu vấn phõn tỏn.

Hỡnh 2.2-9. Vấn tin sau khi dựng vị từ mõu thuẫn (adsbygoogle = window.adsbygoogle || []).push({});

TITLE= Mech.Eng”

EMPH2 ASGDXH1 ASGDXH2

ENO

ENO (R ENOS) (R ENOT)

ENO

Hỡnh 2.2-10. Cõy vấn tin sau khi giao hoỏn phộp hợp và phộp nối

ASGDXH2 ASG DXH1  TITLE= Mech.Eng” EMPH2 ENO ENO TITLE= Mech.Eng” EMPH2

Một phần của tài liệu Thực hiện song song các câu vắn tin trong CSDL phân tán bằng cách sử dụng luồng (Trang 57 - 61)