Rút gọn cho phân mảnh dọc

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

Phân mảnh dọc phân tán một quan hệ dựa trên các thuộc tính chiếu. Vì vậy, phép kết nối sẽ là phép toán tái xây dựng các phân mảnh dọc. Chƣơng trình cục bộ hoá cho một quan hệ phân mảnh dọc bao gồm các kết nối của các mảnh theo thuộc tính chung.

Ví dụ 2.10: Giả sử quan hệ NV(MaNV, TênNV, CVụ) đƣợc phân mảnh nhƣ sau:

NV1 = MaNV, TênNV(NV) NV2 = MaNV, CVụ(NV)

Khi đó chƣơng trình cục bộ hoá cho quan hệ phân mảnh dọc là: NV = NV1 NV2

Cũng nhƣ phân mảnh ngang, các câu truy vấn trên các mảnh dọc đƣợc rút gọn bằng cách xác định các quan hệ trung gian vô dụng và loại bỏ các cây con đã sinh ra chúng. Cho quan hệ R định nghĩa trên tập các thuộc tính A= {A1, A2, ...} và đƣợc phân mảnh dọc thành Ri = A‟(R) trong đó A‟  A. Quy tắc đƣợc phát biểu một cách hình thức nhƣ sau:

D,A‟(Ri) là vô dụng nếu tập thuộc tính chiếu D không thuộc A‟

Ví dụ 2.11: Cho quan hệ NV(MaNV, TênNV, CVụ) đƣợc phân mảnh dọc thành:

NV1 = MaNV, TênNV(NV) NV2 = MaNV, CVụ(NV) Xét câu truy vấn:

Select TênNV From NV

Bằng cách hoán vị phép chiếu và phép kết nối, nghĩa là thực hiện phép chiếu trên thuộc tính TenNV. Khi đó, có thể nhận thấy rằng phép chiếu trên thuộc tính TenNV trên quan hệ NV2 là vô dụng, vì TenNV không phải thuộc tính của NV2. Vì vậy, phép chiếu chỉ cần thực hiện trên NV1 (xem Hình 2.11)

Hình 2.11: Rút gọn phân mảnh dọc 2.2.2.3. Rút gọn cho phân mảnh ngang dẫn xuất

Phân mảnh ngang dẫn xuất là một cách để 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.

Nếu quan hệ R phải phân mảnh dẫn xuất theo quan hệ S, các mảnh của R và S giống nhau ở thuộc tính kết 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.

Vì các bộ của quan hệ R đƣợc đặt tùy chọn theo các bộ của S. Để đơn giản, giả sử chỉ xét mảnh dẫn xuất chỉ đƣợc sử dụng cho mối liên hệ một – nhiều, trong đó một bộ của S tƣơng ứng với n bộ của R và một bộ của R chỉ khớp đúng một bộ của S

Ví dụ 2.12: Cho mối quan hệ một – nhiều NV  PC. Giả sử các quan hệ đƣợc phân mảnh nhƣ sau: NV1= Cvụ=‟TP‟(NV) NV(MaNV, TênNV, CVụ) NV2 = Cvụ‟TP‟(NV) PC1 = PC NV1 PC(MaNV, MaDA, NVụ, Tg) PC2 = PC NV2

Xét câu truy vấn “Đƣa ra tất cả các thuộc tính của NV, PC với NVụ =”PP””, dạng SQL nhƣ sau: Select *  TênNV NV1 NV2 NV1  TênNV

From NV, PC

Where NV.MaNV = PC.MaNV and NV.CVụ = ”PP”

Câu truy vấn trên các mảnh NV1, NV2, PC1, PC2 đã đƣợc định nghĩa. Đẩy phép chọn xuống các mảnh NV1, NV2 câu truy vấn rút gọn lại do mâu thuẫn với vị từ chọn của NV1 = > loại bỏ NV1 (xem Hình 2.12)

Hình 2.12: Rút gọn cho phân mảnh ngang dẫn xuất

b. Câu truy vấn gốc * MaNV PC1 NV2 PC2 NV2  Cvụ=‟PP‟ MaNV Cvụ=‟PP‟

c. Câu truy vấn sau khi đẩy

phép hợp xuống d. Câu truy vấn đã rút gọn

a. Câu truy vấn sau khi đẩy phép chọn xuống PC2 NV2 Cvụ=‟PP‟ MaNV * * MaNV PC1 PC2 NV1 NV2   Cvụ=‟PP‟ * MaNV PC1 PC2 NV2  Cvụ=‟PP‟

2.2.2.4. Rút gọn cho phân mảnh hỗn hợp

Mục đích của phân mảnh hỗn hợp là hỗ trợ một cách hiệu quả các câu truy vấn có chứa phép chiếu, chọn và phép kết nối.

Câu truy vấn trên các mảnh hỗn hợp có thể đƣợc rút gọn bằng cách tổ hợp các quy tắc tƣơng ứng đã đƣợc dùng trong các phân mảnh ngang nguyên thuỷ, phân mảnh dọc, phân mảnh ngang dẫn xuất.

Quy tắc:

1. Loại bỏ các quan hệ rỗng đƣợc tạo ra bởi các phép toán chọn mâu thuẫn nhƣ trên các mảnh ngang.

2. Loại bỏ các quan hệ vô dụng đƣợc tạo ra bởi các phép chiếu trên các mảnh dọc.

3. Phân phối các kết nối cho các phép hợp nhằm cô lập và loại bỏ các kết nối vô dụng. (adsbygoogle = window.adsbygoogle || []).push({});

Ví dụ 2.13: Cho quan hệ NV (MaNV, TênNV, CVụ) đƣợc phân mảnh hỗn hợp

nhƣ sau: NV1 = MaNV  E4 (MaNV, TênNV (NV) ) NV2 = MaNV > E4 (MaNV, TênNV (NV) )

NV3 = MaNV, CVụ (NV)

Chƣơng trình cục bộ hoá: NV = (NV1 NV2 ) NV3 Xét câu truy vấn: Tên của nhân viên có mã E5

Câu truy vấn đƣợc rút gọn nhƣ trong Hình 2.13

 TênNV MaNV=‟E5‟  TênNV  MaNV=‟E5‟ NV3

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

Bƣớc này sẽ xác định thứ tự thực thi truy vấn các mảnh, trạm nào hiệu quả để truyền dữ liệu, nơi mà từng phần của câu truy vấn sẽ đƣợc thực thi.

Tối ƣu hóa truy vấn là một vấn đề khó khăn trong môi trƣờng phân tán do nhiều yếu tố nhƣ phân bổ dữ liệu, tốc độ kênh truyền, việc lập chỉ mục, tính sẵn sàng của bộ nhớ, kích thƣớc của CSDL, việc lƣu trữ các kết quả trung gian...Vai trò của bộ tối ƣu truy vấn là tạo ra một kế hoạch thực thi truy vấn (query execution plan, QEP) với chi phí tối thiểu. Một bộ tối ƣu truy vấn là một module phần mềm thực hiện tối ƣu hóa truy vấn trên cơ sở của ba thành phần quan trọng của một truy vấn là không gian tìm kiếm, chiến lƣợc tìm kiếm và mô hình chi phí.

Hình 2.14: Bộ tối ƣu truy vấn

CÂU TRUY VẤN

TẠO RA KHÔNG GIAN TÌM KIẾM

QEP TƢƠNG ĐƢƠNG

CHIẾN LƢỢC TÌM KIẾM

QEP TỐT NHẤT

QUY TẮC BIẾN ĐỔI

2.2.3.1. Không gian tìm kiếm

Đối với một câu truy vấn đã cho, không gian tìm kiếm có thể đƣợc định nghĩa nhƣ một tập các cây toán tử tƣơng đƣơng, có đƣợc bằng cách áp dụng các quy tắc biến đổi. Để nêu bật các đặc trƣng của bộ tối ƣu hóa truy vấn, chúng ta thƣờng tập trung các cây nối (join tree), là cây toán tử với các phép kết nối hoặc tích Đề các.

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

SELECT TênNV FROM NV, PC, DA

WHERE NV.MNV=PC.MNV AND PC.MDA=DA.MDA

Hình 2.15 minh họa ba cây nối tƣơng đƣơng cho truy vấn trên, thu đƣợc bằng cách sử dụng tính chất kết hợp của các toán tử hai ngôi. Mỗi cây có thể đƣợc gán một chi phí dựa trên chi phí của mỗi toán tử. Cây nối (c) bắt đầu với một tích Đề các có thể có chi phí cao hơn rất nhiều so với cây còn lại.

Với một câu truy vấn có N quan hệ thì sẽ có O(N!) cây nối có thể thu đƣợc từ việc áp dụng tính giao hoán và kết hợp.

MDA ⋈ MDV ⋈ NV PC DA (a) MDV ⋈ MDA ⋈ PC DA NV (b) MDV, MDA ⋈ X DA NV PC

Các công việc một bộ tối ƣu hóa truy vấn cần thực hiện nhƣ sau: - Xác định thứ tự thực hiện của các phép kết nối.

- Xác định phƣơng thức truy cập các phép kết nối.

- Xác định hình dạng của cây nối trong không gian tìm kiếm có đƣợc. Nó có thể là các dạng: Linear Trees (Left Deep Trees), Right Deep trees, Bushy Join Trees, Binary Trees hoặc Zig-Zag (Xem Hình 2.14)

- Xác định thứ tự dịch chuyển của dữ liệu giữa các trạm để giảm số lƣợng dữ liệu và chi phí truyền thông.

Hình 2.16: Hình dáng của một số cây nối

Chiến lƣợc tìm kiếm là muốn nói đến các thuật toán đƣợc áp dụng để xác định kế hoạch thực thi truy vấn tốt nhất từ không gian tìm kiếm giảm chi phí tối ƣu hóa truy vấn. Có hai chiến lƣợc cơ bản: (adsbygoogle = window.adsbygoogle || []).push({});

- Chiến lƣợc xác định (Deterministic Strategy): Chiến lƣợc này tiến hành bằng cách xây dựng các kế hoạch, bắt đầu từ các quan hệ cơ sở, sau đó nối thêm một hoặc nhiều quan hệ ở mỗi bƣớc cho đến khi thu đƣợc mọi kế hoạch khả hữu. Để giảm chi phí tối ƣu hóa, những kế hoạch không dẫn đến giải pháp tối ƣu đƣợc

cắt bỏ. Có hai cách: Theo chiều rộng - xây dựng tất cả các kế hoạch có thể trƣớc khi chọn kế hoạch tốt nhất (Quy hoạch động (Dynamic Programming)), theo chiều sâu – chỉ xây dựng một kế hoạch (Greedy).

- Chiến lƣợc ngẫu nhiên (Randomized Strategy): Tiến hành tìm kiếm giải pháp tối ƣu xung quanh một số điểm cụ thể. Chiến lƣợc này không đảm bảo kế hoạch tối ƣu nhƣng tránh chi phí cao trong tối ƣu hóa về bộ nhớ và thời gian thực hiện. Chiến lƣợc này áp dụng tốt hơn với câu truy vấn có 5 - 6 quan hệ trở lên. Hai kỹ thuật tiêu biểu là Interative Improvement và Simulated Annealing [4].

2.2.3.2. Mô hình chi phí

Mô hình chi phí của bộ tối ƣu hóa gồm có các hàm chi phí để dự đoán chi phí của các toán tử, số liệu thống kê, dữ liệu cơ sở và các công thức để ƣớc lƣợng kích thƣớc các kết quả trung gian.

Hàm chi phí

Chi phí của một chiến lƣợc thực hiện phân tán có thể đƣợc biểu diễn hoặc theo tổng thời gian (total time) hoặc theo thời gian trả lời (response time). Tổng thời gian là tổng của tất cả các thành phần thời gian, còn thời gian trả lời tính từ lúc bắt đầu đến lúc kết thúc câu truy vấn. Công thức chung để tính tổng thời gian nhƣ sau:

Total_time = TCPU* #insts + TI/O* #I/Os + TMSG * #msgs + TTR* #bytes Trong đó:

Total_cost: Tổng thời gian;

TCPU: Thời gian của một lệnh CPU;

TI/O: Thời gian cho một thao tác truy xuất/nhập đĩa;

TMSG: Thời gian cố định của việc khởi hoạt và nhận một thông báo;

TTR: Thời gian cần để truyền một đơn vị dữ liệu từ trạm này tới trạm khác, ta xem CTR là hằng số;

#insts, #I/Os, #msgsm, #byte: Tƣơng ứng là tổng trên các trạm của tất cả các số lệnh CPU, số lần truy xuất/ nhập đĩa, số thông báo, kích thƣớc của tất cả các

thông báo.

Trong công thức trên, hai thành phần đầu là thời gian xử lý cục bộ, hai thành phần sau là thời gian truyền. Thời gian truyền #bytes dữ liệu từ trạm này đến trạm khác đƣợc giả thiết là một hàm tuyến tính của #bytes.

CT(#bytes) = TMSG + TTR* #bytes

Khi thời gian trả lời của câu truy vấn là hàm mục tiêu của bộ tối ƣu thì các xử lý địa phƣơng song song và truyền thông song song phải đƣợc xét. Công thức tổng quát tính thời gian trả lời (response time) là:

Response_time = TCPU * seq_#insts + TI/O * seq_#I/Os + TMSG * seq_#msgs + TTR * seq_#bytes

Trong đó: seq_#x (x có thể là các lệnh CPU, I/O, các thông báo, các byte) là số lớn nhất của x phải đƣợc thực hiện tuần tự đối với sự thực thi của câu truy vấn. Nhƣ vậy có thể bỏ qua bất kỳ xử lý và truyền thông đƣợc thực hiện song song.

Ví dụ 2.15: Hình 2.17 minh hoạ sự khác nhau giữa tổng thời gian và thời

gian trả lời, trong đó máy tính trả lời câu truy vấn tại trạm 3 với dữ liệu từ trạm 1 và trạm 2, ở đây chi phí truyền thông đƣợc xét.

Hình 2.17: Đồ thị minh họa tổng chi phí và thời gian trả lời

Giả sử, TMSG và TTR đƣợc biểu thị theo đơn vị thời gian. Tổng thời gian truyền x đơn vị dữ liệu từ trạm 1 đến 3 và y đơn vị dữ liệu từ trạm 2 đến trạm 3 là:

Vì việc truyền dữ liệu có thể thực hiện song song nên thời gian trả lời câu truy vấn là: Response_time = max{TMSG + TTR*x, TMSG + TTR*y}

Thời gian trả lời tối thiểu đạt đƣợc bằng cách tăng mức độ xử lý song song, tuy nhiên không có nghĩa tổng chi phí là tối thiểu. Ngƣợc lại, tổng chi phí có thể tăng khi có nhiều xử lý địa phƣơng và truyền song song hơn.

Số liệu thống kê CSDL

Tác nhân chính ảnh hƣởng đến hiệu quả hoạt động của một chiến lƣợc thực thi là kích thƣớc các quan hệ trung gian đã đƣợc tạo ra. Khi một phép toán tiếp theo nằm tại một vị trí khác, quan hệ trung gian phải đƣợc di chuyển đến đó. Đó chính là điều khiến chúng ta phải ƣớc lƣợng kích thƣớc của các kết quả trung gian của các phép toán đại số quan hệ nhằm giảm thiểu lƣợng dữ liệu phải truyền. Việc ƣớc lƣợng này dựa trên các thông tin thống kê về các quan hệ cơ sở và các công thức để dự đoán lực lƣợng của các kết quả. Có những đƣợc mất giữa tính chính xác của các số liệu thống kê và chi phí quản lý chúng: Số liệu càng chính xác, chi phí càng cao. Đối với một quan hệ R đƣợc định nghĩa trên tập thuộc tính A = {A1,

A2, ……., An} và đƣợc phân mảnh là R1, R2, ……., Rn dữ liệu thống kê điển hình nhƣ sau:

- Đối với mỗi thuộc tính Ai chiều dài (theo số byte) đƣợc ký hiệu là length (Ai), và đối với mỗi thuộc tính Ai của mỗi mảnh Rj, số lƣợng phân biệt các giá trị của Ai, là lực lƣợng khi chiếu mảnh Rj trên Ai , đƣợc ký hiệu là card (π Ai (Rj)). (adsbygoogle = window.adsbygoogle || []).push({});

- Ứng với miền của mỗi thuộc tính Ai trên một tập giá trị sắp thứ tự đƣợc (ví dụ số nguyên hoặc số thực), giá trị lớn nhất và nhỏ nhất đƣợc ký hiệu là max(Ai) và min(Ai).

- Ứng với miền của mỗi thuộc tính Ai lực lƣợng của miền đƣợc ký hiệu là card(dom[Ai]). Giá trị này cho biết số lƣợng các giá trị duy nhất trong dom[Ai].

- Số lƣợng các bộ trong mỗi mảnh Rj đƣợc ký hiệu là card(Rj)

Đôi khi dữ liệu thống kê cũng bao gồm hệ số chọn nối (join selectivity factor) đối với một số cặp quan hệ, nghĩa là tỷ lệ các bộ có tham gia vào nối. Hệ số chọn

nối đƣợc ký hiệu là SFj của quan hệ R và S là một giá trị thực giữa 0 và 1:

( ⋈ ) ( ) ( )

Chẳng hạn hệ số chọn nối 0.5 tƣơng ứng với một quan hệ nối cực lớn, trong khi đó hệ số 0.001 tƣơng ứng với một quan hệ khá nhỏ. Chúng ta nói rằng nối có độ chọn kém trong trƣờng hợp đầu và độ chọn tốt trong trƣờng hợp sau.

Dữ liệu thống kê này rất có ích cho việc dự đoán kích thƣớc quan hệ trung gian.

Size (R) = card (R) * length (R)

Trong đó length (R) là chiều dài (theo byte) của một bộ của R, đƣợc tính từ các chiều dài của các thuộc tính của R. Việc ƣớc lƣợng card (R), số lƣợng các bộ trong R, đòi hỏi phải sử dụng các công thức đƣợc cho trong phần tiếp theo.

Lực lƣợng của các kết quả trung gian

Dữ liệu thống kê rất có ích khi đánh giá lực lƣợng của các kết quả trung gian. Hai giả thiết đơn giản thƣờng đƣợc đƣa ra về CSDL. Phân phối của các giá trị thuộc tính trong một quan hệ đƣợc giả định là thống nhất và tất cả mọi thuộc tính đều đƣợc độc lập, theo nghĩa là giá trị của một thuộc tính không ảnh hƣởng đến giá trị của các thuộc tính khác. Hai giả thiết này thƣờng không đúng trong thực tế, tuy nhiên chúng làm cho bài toán dễ giải quyết hơn. Dƣới đây sẽ trình bày các công thức ƣớc lƣợng, lực lƣợng các kết quả của các phép toán đại số cơ bản (phép chọn, phép chiểu, tích Descartes, nối, nối nửa, hợp, và hiệu). Quan hệ toán hạng đƣợc ký hiệu là R và S. Hệ số chọn của một phép toán đó đƣợc biểu thị là SFOP, với OP biểu thị cho phép toán.

Phép chọn. Lực lƣợng của phép chọn là:

Card(σF(R)) = SFS(F) * card(R)

Trong đó SFS(F) phụ thuộc vào công thức chọn và có thể đƣợc tính nhƣ sau, với p(Ai) và p(Aj) biểu thị cho vị trí từ thuộc tính Ai và Aj.

( ) ( ( )) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )

SFS (p(Ai) ٨ p(Aj)) = SFS (p(Ai) * SFS (p(Aj))

SFS (p(Ai) ۷ p(Aj)) = SFS (p(Ai) * SFS (p(Aj)) – (SFS (p(Ai)) * SFS (p(Aj))) SFS (Ai  {value}) = SFS (A= value) * card({values})

Phép chiếu. Chiếu có thể loại bỏ hoặc không loại bỏ các bộ giống nhau. Ở đây chúng ta xem nhƣ chiếu có kèm theo cả việc loại bỏ này. Một phép chiếu bất kỳ rất khó ƣớc lƣợng chính xác bởi vì mối tƣơng quan giữa các thuộc tính đƣợc chiếu thƣờng không đƣợc biết. Tuy nhiên, có hai trƣờng hợp đặc biệt có ích nhƣng việc ƣớc lƣợng hoàn toàn tầm thƣờng. Nếu chiếu của quan hệ R dựa trên thuộc tính A duy nhất, lực lƣợng chỉ là số bộ thu đƣợc khi thực hiện phép chiếu. Nếu một trong các thuộc tính chiếu là khóa của R thì card (πA(R)) = card(R)

Tích Descartes. Lực lƣợng của tích Descartes của quan hệ R và S là

card (R x S) = card(R)* card(S)

Phép nối. Không có một phƣơng pháp tổng quát nào để tính lực lƣợng của

phép nối mà không cần thêm thông tin bổ sung. Cận trên của lực lƣợng cho phép nối là lực lƣợng của tích Đề các. Một số hệ thống, chẳng hạn nhƣ hệ INGRES phâ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 42)