Các thuật toán tối ưu hóa truy vấn trong môi trường phân tán

Một phần của tài liệu (LUẬN văn THẠC sĩ) cơ sở dữ liệu phân tán và tối ưu hoá vấn tin luận văn ths công nghệ thông tin 1 01 10 (Trang 63 - 87)

Chương 2 MỘT SỐ NGUYÊN LÝ CHUNG CỦA TỐI ƯU HÓA TRUY VẤN

2.5 Tối ưu hóa truy vấn phân tán

2.5.3 Các thuật toán tối ưu hóa truy vấn trong môi trường phân tán

Như đã phân tích trong phần trước, việc sắp xếp các nối là một nội dung quan trọng trong quá trình tối ưu hóa truy vấn tập trung. Việc sắp xếp thứ tự nối trong môi trường phân tán càng quan trọng hơn, do chi phí cho các thao tác nối

để sắp xếp thứ tự các nối được chú ý đến:

™ Cách thứ nhất là tối ưu hóa trực tiếp dựa trên việc sắp xếp thứ tự nối (Ordering joins)

™ Cách thứ hai là thay các nối bằng các tổ hợp của nối nửa (Semijoin ordering), nhằm giảm thiểu chi phí truyền dữ liệu.

2.5.3.1 Các thuật toán dựa trên sắp xếp thứ tự nối (Ordering Joins)

Các thuật toán của hệ INGRES phân tán và System R* là đại diện cho nhóm này. Mục đích của phần này nhằm trình bày các vấn đề của việc sắp thứ tự nối và tạo tiền đề cho phần tiếp theo có sử dụng nối nửa để tối ưu các câu truy vấn phân tán.

Trước khi đi vào vấn đề chính chúng ta đưa ra một số giả thiết như sau:

™ Câu truy vấn được định vị trên các mảnh, ta dùng thuật ngữ quan hệ để chỉ một mảnh được lưu trữ tại một trạm cụ thể.

™ Tập trung vào việc sắp xếp thứ tự nối, bỏ qua thời gian xử lý cục bộ.

™ Chỉ xem xét các câu truy vấn nối mà các toán hạng quan hệ được lưu tại những trạm khác nhau.

™ Giả sử việc truyền dữ liệu (quan hệ) được truyền theo mỗi lần một tập (set at a time), chứ không phải mỗi lần một bộ (tuple at a time).

™ Bỏ qua chi phí truyền tại trạm kết quả.

Ta thử xét câu truy vấn chỉ có hai toán hạng R và S. Quan hệ được lựa chọn để truyền hiển nhiên là quan hệ nhỏ tới trạm chứa quan hệ lớn hơn.

R S

Nếu kích thước(R) > kích thước(S) Nếu kích thước(R) < kích thước(S)

Kích thước (R)=|R|*độ dài theo byte của một bộ của R

Hình 2. 22 Truyền các toán hạng trong phép toán hai ngôi

Với trường hợp có hơn hai quan hệ kết nối, cũng giống như trên, mục đích của thuật toán sắp xếp thứ tự kết nối là để truyền các quan hệ nhỏ. Vấn đề nảy sinh

cũng rất khó khăn. Một giải pháp được đưa ra là ước lượng chi phí truyền của tất cả các phương án, chiến lược rồi chọn ra một chiến lược tốt nhất. Tuy nhiên số các phương án, chiến lược tăng nhanh khi số các quan hệ tăng, nên người ta thường sử dụng heuristic để loại trừ một số trường hợp xấu.

Thí dụ 2.19:

Xét câu truy vấn sau dưới dạng đại số quan hệ:

NHANVIEN PHANCONG

DUAN ><MSDA ><MSNV

Ta có đồ thị nối tương ứng trong hình 2.22

Hình 2. 23 Đồ thị nối của câu truy vấn phân tán

Với giả thiết vị trí của ba quan hệ như trên, ta có thể thực hiện câu truy vấn này bằng năm cách khác nhau:

1. NHANVIEN →trạm 2. Tại 2 tính toán PHANCONG NHANVIEN

NHANVIEN'= >< . Truyền NHANVIEN'→ trạm 3.

Tại trạm 3 tính toán NHANVIEN' ><DUAN 2. PHANCONG→trạm 1.

Tại trạm 1 tính toán NHANVIEN'=NHANVIEN ><PHANCONG. Truyền

NHANVIEN' trạm 3. Tại trạm 3 tính toán NHANVIEN'><DUAN 3. PHANCONG →trạm 3.

Tại 3 tính toán PHANCONG'=PHANCONG ><DUAN . Truyền PHANCONG'→ trạm 1.

Tại trạm 1 tính toán PHANCONG'><NHANVIEN

5. NHANVIEN →trạm 2. DUAN →trạm 2.

Tại 2 tính NHANVIEN ><DUAN><PHANCONG.

Để có thể chọn được phương án tốt thì ta cần phải đánh giá được:

) (NHANVIEN

size , size(PHANCONG), size(DUAN), )

(NHANVIEN PHANCONG

size >< , size(PHANCONG><DUAN). Nếu ta quan

tâm đến thời gian đáp ứng thì nên xét phương án 5, do khả năng truyền song song.

Nếu sử dụng heurisctic, với giả thiết lực lượng của các nối được tạo ra là tích của các lực lượng, trong trường hợp này các quan hệ được sắp xếp thứ tự theo kích thước và thứ tự thực hiện sẽ được cho bởi cách xếp thứ tự và đồ thị nối.

Thí dụ, nếu với thứ tự quan hệ (NHANVIEN,PHANCONG,DUAN) thì ta chọn phương án 1, còn nếu với thứ tự (DUAN,PHANCONG,NHANVIEN) có thể dùng chiến lược 4.

Phần này sẽ trình bày một số thuật toán dựa trên cơ sở sắp xếp thứ tự nối (Ordering Joins) để minh họa kỹ thuật đã được trình bày.

Thuật toỏn INGRES phõn tỏn

INGRES sử dụng thời điểm tối ưu hóa động, mục tiêu của thuật toán là làm giảm thiểu chi phí tổ hợp của thời gian truyền tin và thời gian đáp ứng. Chú ý rằng thuật toán tối ưu hóa truy vấn bỏ qua chi phí truyền dữ liệu đến trạm nhận kết quả và để đơn giản thuật toán chỉ xét kiểu phân mảnh ngang.

Đầu vào là câu truy vấn được diễn tả bằng phép tính quan hệ bộ (trong dạng chuẩn hội) và thông tin lược đồ gồm: kiểu mạng, trạm và kích thước của mỗi mảnh. Thuật toán được thực hiện tại trạm xuất phát của câu truy vấn, được gọi là trạm chủ (master site).

Thuật toán tối ưu hóa INGRES phân tán (D-INGRES-QOA):

INPUT: MRQ câu truy vấn đa quan hệ

OUTPUT: kết quả của truy vấn đa quan hệ cuối cùng Begin

for mỗi ORQ, có thể tách ra in MRQ do {chạy tất cả các truy vấn 1quan hệ}

);

(ORQi

run (1)

không thể rút gọn} (2) while n≠0 do {n là số câu truy vấn không thể rút gọn} (3) begin

{chọn câu truy vấn không thể rút gọn chứa các mảnh nhỏ nhất}

) _ (

_ '

' SELECT QUERY MQR list

MRQ ← (3.1)

{xác định các mảnh cần truyền và trạm xử lý cho MRQ’}

Fragment-site-list←SELECT_STRATEGY(MRQ') (3.2) {truyền các mảnh đã chọn tới trạm được chọn}

for mỗi cặp (F,S) trong Fragment-site-list do (3.3) chuyển mảnh F đến trạm S

end-for ) (MRQ'

run (3.4)

−1

n n end-while End.

Bước 1: tất cả các truy vấn một quan hệ (chọn, chiếu) có thể tách được sẽ được xử lý cục bộ.

Bước 2: Thuật toán rút gọn [Wong and Youssefi, 1976] được áp dụng cho câu truy vấn ban đầu, để tách tất cả các truy vấn con không thể rút gọn và các truy vấn một quan hệ bằng phép tách như trong phần xử lý tập trung. Bỏ qua các câu truy vấn một quan hệ vì đã được xử lý ở bước 1.

Bước 3: áp dụng cho các câu truy vấn không thể rút gọn.

Bước 3.1: chọn các truy vấn chưa được xử lý, chứa các mảnh nhỏ hơn.

Bước 3.2: chọn chiến lược tốt nhất để xử lý câu truy vấn MRQ’ (câu truy vấn không thể rút gọn và có chứa ít nhất hai quan hệ). Chiến lược này được mô tả bằng một danh sách các cặp (F,S) trong đó F là mảnh cần truyến đến trạm S.

Bước 3.3: truyền tất cả tới trạm xử lý chúng.

Bước 3.4: Thực hiện truy vấn MRQ’. Nếu còn các câu truy vấn con thì thuật toán quay lại bước (3) và thực hiện bước lặp tiếp theo, nếu ngược lại thì thuật toán kết thúc.

Đặc điểm của thuật toán này là tìm kiếm trong không gian lời giải có giới hạn, trong đó quyết định tối ưu hóa được đưa ra cho mỗi bước mà không xem xét đến ảnh hưởng của nó lên tối ưu hóa toàn cục. Tuy nhiên tối ưu hóa truy vấn

hệ trung gian.

Lưu ý rằng tại bước 3.2 việc tối ưu hóa chính là xác định xem làm thế nào để thực thi câu truy vấn bằng cách chọn các mảnh sẽ được di chuyển (truyền) và các trạm chịu trách nhiệm xử lý. Với một câu truy vấn con n-quan hệ, các mảnh từ n-1 quan hệ phải được truyền tới trạm của các mảnh của quan hệ còn lại, chẳng hạn là Rp, rồi được nhân bản tại đó. Cũng thế, quan hệ còn lại có thể được phân hoạch tiếp thành k mảnh bằng nhau để tăng độ song hành. Phương pháp này được gọi là phân mảnh – và – nhân bản, và thực hiện phép thế các mảnh chứ không phải là thế bộ như trong INGRES tập trung. Nhờ việc này một số trạm đã giảm được thời gian đáp ứng truy vấn (nhờ việc xử lý song song), nhưng lại tăng tổng chi phí đặc biệt là chi phí truyền.

Thuật toỏn của System R*.

Thuật toán tối ưu phân tán của System R* là một mở rộng về chất của các kỹ thuật đã được phát triển cho bộ tối ưu hóa trong môi trường tập trung của System R. Nó sử dụng cách tiếp cận biên dịch, trong đó thực hiện việc tìm kiếm vét cạn tất cả các chiến lược khác nhau để chọn ra được một chiến lược với chi phí thấp nhất. Mặc dù chi phí cho các dự đoán và liệt kê chiến lược này là khá đắt, nhưng tổng chi phí của sự tìm kiếm vét cạn được đền bù lại khá nhanh nếu câu truy vấn được sử dụng thường xuyên. Thuật toán được mô tả trong [Selinger and Adiba, 1980] có hỗ trợ phân mảnh, nhưng phiên bản được cài đặt trong R* lại không hỗ trợ phân mảnh lẫn nhân bản. Thuật toán xử lý truy vấn R* chỉ dùng các quan hệ làm đơn vị cơ bản.

Nhiệm vụ biên dịch được trạm chủ (master site) điều phối, tại đó câu truy vấn được bắt đầu. Bộ tối ưu hóa của trạm chủ chịu trách nhiệm đưa ra các quyết định đối với các trạm khác (trạm vệ tinh – apprentice site), như lựa chọn các trạm thực hiện, các mảnh và phương pháp truyền dữ liệu. Trạm vệ tinh là những trạm có chứa các quan hệ cần cho câu truy vấn, nó chịu trách nhiệm về các quyết định cục bộ như sắp thứ tự các nối tại trạm, tạo ra các phương pháp truy nhập cục bộ cho câu truy vấn. Hàm mục tiêu của tối ưu System R* là hàm

INPUT: QT cây truy vấn

OUTPUT: strat chiến lược có chi phí nhỏ nhất Begin

for mỗi quan hệ RiQT do begin

for mỗi đường truy cập APij tới Ri do xác định cost(APij)

end-for

ij

i AP

AP

best_ ← với chi phí nhỏ nhất end-for

for mỗi thứ tự Ri1,Ri2,...,Rin) với i=1,...,n! do

xây dựng chiến lược (...((best_APij><Ri2)><Ri3)><...><Rin) tính chi phí của chiến lược

end-for

strat←chiến lược với chi phí nhỏ nhất

for mỗi trạm k có chứa quan hệ có mặt trong QT do begin

k

LS chiến lược cục bộ (strategy,k) site

LS

send( k, k) {mỗi chiến lược cục bộ được tối ưu hóa tại trạm k}

end-for End.

Thuật toán này được diễn giải như sau: bộ tối ưu hóa phải chọn thuật toán nối (vòng lặp lồng, hay nối trộn) thứ tự kết nối, đường truy nhập vào mỗi mảnh (chăng hạn chỉ mục, quét tuần tự…). Các quyết định này dựa trên số liệu thống kê, các công thức dùng để đánh giá kích thước quan hệ trung gian và thông tin về đường truy nhập. Hơn nữa, bộ tối ưu còn phải chọn các trạm chứa các kết quả nối và phương thức truyền dữ liệu giữa các trạm. Để kết nối hai quan hệ có thể có 3 trạm có thể được chọn: trạm chứa quan hệ thứ nhất, trạm chứa quan hệ thứ hai, hoặc một trạm thứ 3 (chứa kết quả nối để thực hiện phép toán tiếp theo). R* hỗ trợ hai phương pháp truyền dữ liệu giữa các trạm là:

1. Chuyển toàn bộ (ship-whole). Quan hệ được chuyển đến trạm kết nối và được lưu trong một quan hệ tạm thời trước khi được kết nối

2. Tìm về khi cần (fetch-as-needed). Quan hệ ngoài được quét tuần tự, với mỗi bộ, giá trị kết nối được gửi tới trạm của quan hệ trong, ở đó nó chọn các bộ có giá trị khớp với nó và chuyển đến trạm của quan hê ngoài .

với mỗi bộ của quan hệ ngoài.

Phương pháp 1, dữ liệu truyền lớn, nhưng ít thông báo hơn phương pháp 2.

Dựa trên quan sát trực quan ta thấy, khi quan hệ nhỏ thì phương pháp 1 sẽ tốt hơn. Ngược lại, nếu quan hệ lớn và phép kết nối có tính chọn lọc tốt (chỉ chọn đựoc một số ít bộ phù hợp) thì phương án 2 tốt hơn. R* không xét tất cả các tổ hợp có thể của các phương pháp kết nối với các phương án truyền vì một số trong chúng là vô ích.

Các chiến lược sẽ được mô tả chi tiết với các công thức chi phí đơn giản hóa.

Cho phép kết nối của một quan hệ ngoài R với quan hệ trong S trên thuộc tính A, chúng ta có bốn chiến lược nối. Gọi:

™ LC là chi phí xử lý cục bộ

™ CC là chi phí truyền

™ Ký hiệu s là số lượng trung bình của các bộ của S khớp với một bộ của R. Ta có

) (

) (

R card

R S s=card ><A

Ta có các chiến lược nối như sau:

Chiến lược 1

Truy xuất bộ của quan hệ ngoài Truyền đền trạm chứa quan hệ trong Nối với S khi chúng đến đó

Tổng chi phí = LC(truy xuất card(R) bộ của R)

+ CC(size(R))

+ LC(truy xuất s bộ của S)*card (R) Chiến lược 2

Chuyển quan hệ trong tới trạm chứa quan hệ ngoài

Chúng phải được ghi vào quan hệ tạm thời T mà không kết nối ngay khi đến.

Tổng chi phí = LC(truy xuất card(S) bộ của S)

+ CC(size(S))

+ LC(lưu card(S) bộ trong T)

+ LC(truy xuất s bộ của T)*card (R) Chiến lược 3

Chuyển cả hai quan hệ trong và ngoài tới trạm thứ 3 và tính toán kết nối ở đó Tổng chi phí = LC(truy xuất card(S) bộ của S)

+ CC(size(S))

+ LC(lưu card(S) bộ trong T)

+ LC(truy xuất card(R) bộ của R)

+ CC(size(R))

+ LC(truy xuất s bộ của T)*card (R) Chiến lược 4

Tìm về các bộ của quan hệ trong khi cần cho mỗi bộ của quan hệ ngoài Với mỗi bộ thuộc R, giá trị thuộc tính kết nối được gửi tới trạm chứa S

Sau đó s bộ phù hợp với giá trị đó được truy xuất và gửi tới trạm của R để được kết nối khi chúng đến

Tổng chi phí = LC(truy xuất card(R) bộ từ R) + CC(length(A))* card (R)

+ LC(truy xuất s bộ từ S)*card (R) + CC(length(S))* card (R)

Thí dụ 2.20:

Chúng ta hãy xét câu truy vấn chứa nối trên thuộc tính MSDA của quan hệ DUAN (quan hệ ngoài) với DUAN (quan hệ trong).

Với giả thiết rằng DUAN và PHANCONG được lưu tại hai trạm khác nhau và trong quan hệ PHANCONG có một chỉ mục trên MSDA. Các chiến lược khả thi cho truy vấn này là:

1. Chuyển toàn bộ DUAN đến trạm của PHANCONG.

2. Chuyển PHANCONG đến trạm của DUAN.

3. Tìm về các bộ PHANCONG khi cần cho mỗi bộ của DUAN.

4. Di chuyển PHANCONG và DUAN đến trạm thứ 3.

™ Nếu không có phép toán nào cần thực hiện sau nối thì với

PHANCONG

DUAN >< chiến lược 4 có chi phí cao nhất.

™ Nếu size(DUAN) lớn hơn nhiều so với size(PHANCONG) thì chiến lược 2 dường như là tốt nhất nếu chi phí xử lý cục bộ không quá cao so với chiến lược 1 và 3. Lưu ý rằng ở chiến lược 1 và 3 thì chi phí xử lý cục bộ có thể tốt do có thể tận dụng được chỉ mục trên thuộc tính nối.

™ Bằng không thì chúng ta sẽ phải lựa chọn chiến lược 1 hoặc 3 tùy theo kích thước của các quan hệ DUAN và PHANCONG.

Về khái niệm thuật toán trên có thể coi như một tìm kiếm vét cạn trong tất cả n!

các khả năng hoán vị các thứ tự kết nối, phương pháp nối… có thể, và vì thế độ phức tạp sẽ là tổ hợp theo số quan hệ liên quan. Khi số quan hệ tham gia là lớn thì chi phí cho tối ưu hóa cũng lớn.

Tuy nhiên bằng cách sử dụng các kỹ thuật quy hoạch động, heuristics thực sự thuật toán System R* làm giảm bớt được các lựa chọn chiến lược không hiệu quả.

2.5.3.2 Các thuật toán dựa trên nối nửa (semijoins)

Phần này sẽ trình bày phương án sử dụng nối nửa để hạ thấp tổng chi phí của các câu truy vấn nối. Trở ngại lớn nhất của phương pháp nối được mô tả ở phần trên là toàn bộ quan hệ -toán hạng phải được truyền giữa các trạm. Phép kết nối nửa làm việc như một tác nhân rút gọn kích thước giống như phép chọn.

Kết nối của hai quan hệ R và S trên thuộc tính A, lưu tại trạm 1 và 2 tương ứng, có thể được tính bằng cách thay một hoặc cả hai toán hạng bằng một nối nửa với quan hệ kia nhờ quy tắc sau đây:

S

R><A ⇔ (R><A S)><A S

R><A(S><A R)

⇔ (R><A S)><A(S><A R)

Việc chọn lựa một trong 3 chiến lược nối nửa trên đòi hỏi phải ước lượng các chi phí tương ứng của chúng. Sử dụng nối nửa sẽ có ích nếu chi phí tạo và gửi

hai chọn lựa: R><A S với (R><A S)><A S, với giả thiết rằng )

( )

(R size S size < .

Chương trình sử dụng nối nửa được trình bày như sau:

1. ∏A(S)→ trạm 1

2. Trạm 1 tính toán R'=R><A S 3. R'→ trạm 2

4. Trạm 2 tính toán R'><A S

Cách tiếp cận nửa kết nối là tốt nếu: size(∏A(S))+size(R><A S)<size(R)

Phương pháp nối nửa là tốt hơn nếu nối nửa hoạt động như một tác nhân rút gọn đầy đủ, tức là nếu một số ít các bộ của R tham gia vào nối, ngược lại phương pháp nối là tốt hơn nếu như hầu hết các bộ của R tham gia vào nối, bởi vì phương pháp nối nửa đòi hỏi thêm một lần truyền kết quả chiếu nữa.

Điều quan trọng cần chú ý rằng không có cách tiếp cận nào là tốt nhất, và chúng cần được xem như là những phương án bổ trợ cho nhau.

Nhận xét tổng quát, nối nửa có thể làm giảm đi kích thước của các quan hệ - toán hạng có trong các câu truy vấn đa nối. Tuy nhiên trong trường hợp này việc tối ưu hóa câu truy vấn cũng trở nên phức tạp hơn.

Thí dụ 2.21:

Xét lại đồ thị nối của các quan hệ NHANVIEN, PHANCONG, và DUAN đã nêu ở thí dụ 2.19 và hình 2.23, ta thấy có có thể áp dụng thuật toán nối trước đây bằng các dùng các nối nửa cho từng nối. Thí dụ về một chương trình tính toán NHANVIEN><PHANCONG><DUAN là:

DUAN PHANCONG

NHANVIEN'>< ' ><

với NHANVIEN' = NHANVIEN >< PHANCONGPHANCONG' =PHANCONG ><DUAN .

Ta có thể rút gọn thêm nữa kích thước của một quan hệ - toán hạng bằng dùng nhiều nối nửa. Thí dụ NHANVIEN’ có thể được thay thế bằng

)

" NHANVIEN (PHANCONG DUAN

NHANVIEN = >< >< bởi vì nếu

<

Một phần của tài liệu (LUẬN văn THẠC sĩ) cơ sở dữ liệu phân tán và tối ưu hoá vấn tin luận văn ths công nghệ thông tin 1 01 10 (Trang 63 - 87)

Tải bản đầy đủ (PDF)

(127 trang)