Một số phương án tiếp cận xử lý nối phân tán khác

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

3.2.1 Sử dụng thông tin phụ thuộc vị trí (placement dependency) để thực hiện

nối [7].

Xét nối tự nhiên giữa hai quan hệ R1 và R2 trên thuộc tính chung A, với giả thiết rằng chúng được phân mảnh như trong hình 3.12. Chúng ta xét phương án nối như sau: (F11><F21)∪(F12 ><F22). Với phương án này, nếu như ta có thể thu được kết

quả như R1><R2, thì thao tác nối các mảnh có thể thực hiện song song mà không cần phải truyền dữ liệu. Thêm nữa ta có thể tận dụng các chỉ mục sẵn có trên từng trạm để thực hiện nối. Tuy nhiên trên thực tế thì phương án này có thể dẫn đến kết quả không chính xác.

1

S S2

R1 F11 F12

R2 F21 F22

Hình 3. 12 Hai quan hệđược phân mảnh

Ví dụ nếu bộs trong F11 và bộ t trong F22 cùng chứa giá trị “a” của thuộc tính A, thì bộ s sẽđược nối với bộ t trong phép nối giữa R1R2. Tuy nhiên với phương án nối trên thì chúng lại không tham gia trong phép nối của các mảnh, do các bộ này nằm trên các trạm khác nhau và thao tác nối các mảnh được thực hiện mà không có việc truyền dữ liệu. Tuy kết quả của phương án này không phải lúc nào cũng chính xác, nhưng trong nhiều trường hợp cụ thể thì ta vẫn có thể sử dụng nó cùng với các ràng buộc.

Thí dụ 3.1:

R1 là là quan hệ NHANVIEN; R2 là quan hệ chứa các thông tin của những người phụ thuộc vào nhân viên này PHUTHUOC(MSNV, MSPT,TENPT,… ). Giả sử các bộ của PHUTHUOC luôn được gắn với bộ của NHANVIEN, tức là nếu một nhân viên làm việc tại một chi nhánh, và nếu bộ của họ nằm tại F11 thì bộ của người phụ

Định nghĩa 3.1Hai mảnh của quan hệ Ri và Rj có phụ thuộc vị trí trên thuộc tính A nếu Fis ><A Fjt với st. Nói cách khác Ri><Rj=∪(Fis ><Fjs), với mỗi trạm

s chứa các mảnh của hai quan hệ[7].

Để thuận tiện ta biểu diễn điều kiện nối là Ri.A=Rj.A.

Nhn xét 1: Nếu RiRjphụ thuộc vị trí trên thuộc tính A., thì nó sẽ có phụ

thuộc vị trí trên mọi tập các thuộc tính B (có chứa A). Có được kết quả trên là do nếu FisFjt với st không có giá trị chung nào trên thuộc tính A thì chúng không thể có giá trị chung nào trên thuộc tính (hợp) B chứa A.

Tiếp theo ta nhận thấy rằng nếu RiRjphụ thuộc vị trí trên thuộc tính A, và thuộc tính (hoặc tập của các thuộc tính) B xác định hàm bởi A và A không chứa giá trị null thì Ri Rj sẽ có phụ thuộc vị trí trên B. Giả sử nếu ta không có phụ thuộc vị trí trên B, có nghĩa là: có 2 trạm khác nhau s và t với mảnh của Ri nằm trên trạm s là Fis và mảnh của Rj nằm trên trạm t là Fjt, và giá trị chung “b” trên thuộc tính B. Do phụ thuộc hàm và do không chứa giá trị null, nên bộ củaFis và bộ của Fjt có giá trị“b” trên thuộc tính B, thì phải có cùng giá trị trên thuộc tính A. Như vậy điều này mâu thuẫn với việc RiRjphụ thuộc vị trí trên thuộc tính A. Như vậy Ri

Rj phải có phụ thuộc vị trí trên thuộc tính B. Nói cách khác thuộc tính B được suy ra trực tiếp bởi A sẽ là thuộc tính mà RiRj có phụ thuộc vị trí trên nó. Dựa trên cách tiếp cận này chúng ta có thể suy luận tiếp cho thuộc tính C (suy ra trực tiếp từ B và gián tiếp từ A). Với tập các phụ thuộc vị trí và tập các phụ thuộc hàm đầy đủ thì ta có thể suy diễn được tất cả các các phụ thuộc vị trí.

Nhn xét 2: Nếu RiRjphụ thuộc vị trí trên thuộc tính A và Rj, Rkphụ

thuộc vị trí trên B, thì: ) ( ) (Ri><A Rj><B Rk =∪ Fis ><A Fjs ><B Fks với s là các trạm chứa các mảnh của Ri, Rj, Rk.

Nói cách khác, các thao tác nối các mảnh có có thểđược thực hiện cục bộ mà không cần truyền dữ liệu. kết quả thu được theo cách sau:

= ∪

= (( ) )

)

)) ( ( )) ( (∪s Fis ><A Fjs ><B Fks ∪ ∪s,ts Fis ><A Fjs ><B Fkt

Ta thấy rằng thao tác nối cuối cùng trên thuộc tính B luôn cho giá trị rỗng (do tính chất của phụ thuộc vị trí). Do vậy Ri><A Rj><B Rk có thể được xử lý mà không

cần truyền dữ liệu. Giả sử truy vấn Q chứa câu truy vấn con Q’ và nối Rj><B Rk.

Với Rj là quan hệ kết quả từ Q’ và Rk không nằm trong Q’. Giả sử thao tác nối của Q’ được xử lý mà không cần truyền dữ liệu và có phụ thuộc vị trí của RjRk trên thuộc tính B (hoặc tập con của B), thì thao tác nối của truy vấn có thể được tiến hành mà không cần truyền dữ liệu. (Ví dụ Q’ là Ri><A Rj và Q là

Rk Rj

Ri><A ><B ).

Căn cứ trên các nhận xét trên chúng ta xây dựng một thuật toán để xác định được thao tác nối có thể thực hiện mà không cần truyền dữ liệu.

Placement-Dependency(Q, P, S)

/* R={R1,R2...Rn} là tập các quan hệ dẫn xuất từ truy vấn Q. P là thông tin về phụ thuộc vị trí. S là tập lớn nhất các thao tác nối có thể thực hiện được mà không cần truyền dữ liệu. Khởi đầu S=φ, khi kết thúc nếu S=R thì Q có thể thực hiện không cần truyền dữ liệu */ Khởi tạo S=φ; } ... , {R1 R2 Rn R= ;

If cặp quan hệ RiRjR có thể tìm thấy sao cho chúng có phụ thuộc vị trí trên thuộc tính A nào đó và Ri ><C Rj, với C chứa A then

Đặt RiRj vào tập S;

If không tìm thấy cặp quan hệ nào như vậy then

Thuật toán kết thúc với S =φ;

While (còn quan hệRk trong R nhưng không nằm trong S thỏa mãn tính chất ** )

Chèn Rk vào tập S;

If S =Rthen Q có thểđược xử lý mà không cần truyền dữ liệu.

Tính chất ** : để có thể đưa được Rk vào S thì cần có quan hệRj trong S sao cho giữa RjRk có phụ thuộc vị trí trên thuộc tính B nào đó và Rj><B Rkcó trong Q hoặc có thểđược suy ra từ Q.

Thí dụ 3.2:

Cho truy vấn R1><A R2><B R3><C R4. Giả sử ta có phụ thuộc vị trí như sau:

R2R3 trên thuộc tính B

R3R4 trên thuộc tính C.

Khởi đầu S là rỗng, sau khi câu lệnh ifđầu tiên được thực hiện thì R1R2 sẽđược đưa vào S. Sau đó R3 cũng được đưa vào S do có tồn tại phụ thuộc vị trí giữa R2

R3 trên thuộc tính B. Tiếp tục như vậy cuối cùng ta đưa được R4 vào trong S. Và vì 4

3 2

1 R R R

R

S= ><A ><B ><C nên truy vấn có thểđược xử lý mà không cần truyền dữ liệu.

3.2.2 Thuật toán phân mảnh và nhân bản [7].

Khi thao tác nối trong truy vấn Q không thể xử lý được nếu không truyền dữ liệu thì ta cấn phải tìm phương án thực thi khác. Một trong những phương án đó là thuật toán Phân mảnh và Nhân bản (được sử dụng trong INGRESS phân tán).

Vẫn với ví dụ trong hình 3.12 với giả thiết rằng các mảnh vẫn được lưu tại trạm ban đầu sau khi thực hiện việc truyền, ta thực hiện nhân bản R2 bằng cách truyền các mảnh F21 từ S1 tới S2 và F22 từ S2 tới S1 và thu được kết quả như trong hình 3.13 . Xét bộ t trong R1 nó có thể ở trong F11 hoặc F12. Nếu ở trong F11 thì nó được nối với bản sao của R2 tại trạm S1.Nếu ở trong F12 thì nó được nối với bản sao của R2 tại trạm S2. Như vậy ta có R1><R2=∪i(F1i ><R2).

Tại mỗi trạm Si thì thao tác nối được thực hiện giữa F1iR2. Các thao tác nối này có thể được thực hiện song song. Và do F1i luôn nhỏ hơn R1 nên phương án này luôn mang lại hiệu quả trên khía cạnh thời gian đáp ứng. Phương án này có thể dùng được cho các truy vấn có hơn 2 quan hệ tham gia.

1

S S2

R1 F11 F12

R2 R2 R2

Hình 3. 13 Cấu hình trước khi xử lý nối

Cần chú ý rằng khi một quan hệ (hay mảnh) được truyền từ trạm này đến trạm khác thì các chỉ mục cục bộ của nó không còn hữu dụng tại trạm đến. Tổng các chi phí

FT(Q,S1,R1), trong đó tham số thứ 3 là quan hệ được chọn để giữ lại ở trạng thái phân mảnh. Tương tự ta có chi phí tại trạm S2 là FT(Q,S2,R1), như vậy với phương án chọn R1 thì ta có thời gian đáp ứng là: max{FT(Q,S1,R1), FT(Q,S2,R1)}, và khi chọn R2 là: max{FT(Q,S1,R2), FT(Q,S2,R2)}.

Chúng ta sẽ chọn phương án nào có thời gian đáp ứng nhỏ hơn, và để đơn giản ta cũng không xét chi phí truyền kết quả về nơi người dùng yêu cầu.

Vẫn với thí dụ trong hình 3.12, với giả thiết |F11|=50, |F12 |=50, |F21|=100,

200 |

|F22 = , trong đó |Fxy | là kích thước của mảnh . Nếu ta coi chí phí truyền là C(X)=X, nghĩa là c0 =0 và c1 =1 với c0 là chi phí khởi tạo kênh truyền, và c1 là chi phí truyền 1 gói dữ liệu (unit/packet).

Chi phí xử lý nối cục bộ tại mỗi trạm là J(X1,X2)=5.(X1 +X2). Chi phí cho phép hợp tại mỗi trạm là U(X1,X2)=2.(X1+X2). Với tất cả các chi phí này ta có thểước lượng được thời gian đáp ứng khi chọn R1 là: FT(Q,S1,R1) = 200 + 2.(100 + 200) + 5.(50 +300)=2550 trong đó 200 là chi phí truyền F22, và 2.(100 + 200) là chi phí cho phép hợp giữa F21 và F22 và 5.(50 +300) là chi phí cho thao tác nối giữa R2 và

11

F . Tương tự như vậy FT(Q,S2,R1) =100 + 2.(100 + 200) + 5.(50 +300)=2450, như vậy: max{FT(Q,S1,R1), FT(Q,S2,R1)}=2550.

Và khi chọn R2 thì là max{FT(Q,S1,R2),FT(Q,S2,R2)}=1750. Như vậy phương án chọn R2 được giữ lại ở trạng thái phân mảnh sẽđược chọn.

Thuật toán Phân mảnh – và – Nhân bản

Fragment-and-Replicate(Q,R,S)

/*Q là truy vấn liên quan đến tập các quan hệ R xác định trong tập các trạm S*/

For mỗi quan hệ Ri được giữở trạng thái phân mảnh,

For mỗi Sj chứa mảnh của quan hệRi,

Tính toán ước lượng thời gian kết thúc truy vấn con tại trạm Sj, FT(Q,Sj,Ri);

Tính toán thời gian đáp ứng nếu quan hệRiđược giữở trạng thái phân mảnh, RRi=maxj{FT(Q,Sj,Ri)};

Quan hệđược chọn là quan hệ có RRk=mini{RRi}.

Tuy nhiên trên thực tế việc giải bài toán này trong nhiều trường hợp lại là bài toán khó. Xét ví dụ như trong hình 3.14. Và để giải quyết bài toán này thì người ta thường tìm cách đưa vào các heuristic. Và việc tìm cách kết hợp phương pháp Phân mảnh-và-Nhân bản với phương pháp sử dụng thông tin phụ thuộc vị trí cũng được nghiên cứu. 1 S S2 … Sk Sk+1 Sk+2 R1 F11 F12 … F1k R2 R2 R2 Hình 3. 14 Một ví dụ về phân mảnh trên các trạm

3.2.3 Thuật toán qui hoạch băm [7]

Một cách tiếp cận khác được xét đến khi các phương pháp trên không thực hiện được, đó là sử dụng quy hoạch băm. Xét lại thí dụ trong hình 3.12, giả sử thao tác nối được thực hiện trên thuộc tính A (A chỉ chứa giá trị nguyên). Chúng ta sử dụng hàm băm để quy hoạch như sau h(a)=1 nếu giá trị của a là lẻ, h(a)=0 nếu a chẵn. Ta sử dụng quy tắc : mỗi khi có h(a)=1 thì bộ đó được gửi tới trạm S1, còn nếu ngược lại thì bộ được gửi tới trạm S2. Theo cách đó F11 được phân hoạch thành 2 mảnh con F11oF11e, và F12 được phân hoạch thành F12oF12e, với ký hiệu o

e tương ứng với giá trị lẻ và chẵn của thuộc tính A. F11e được truyền tới trạm S2, và thực hiện hợp với mảnh F12e để tạo thành mảnh F12' , cũng như thế ta có ' 11 F thu được tại trạm S1 bởi hợp của hai mảnh F11oF12o. Tương tự ta có ' 21 F và ' 22 F tại các trạm nhờ việc truyền dữ liệu và hợp chúng. Và ta nhận thấy rõ ràng rằng ( ') 11 F A ∏ và ( ' ) 22 F A

∏ không có giá trị chung, do một bên chỉ chứa giá trị lẻ còn một bên chỉ chứa giá trị chẵn. Như vậy ' =φ

22 '

11 F

phụ thuộc vị trí trên thuộc tính A giữa R1R2 (dựa trên việc xây dựng các mảnh mới). Như vậy R1><A R2 sẽ là kết quả của ( ) ( ' ) 22 ' 21 ' 21 ' 11 F F F F ><A ∪ >< . Trong trường hợp miền giá trị của thuộc tính A không phải là nguyên, thì ta có thể dùng bit cuối của thể hiện nhị phân của giá trị này để phân hoạch. Hoặc một lựa chọn khác khi hàm băm có giá trị trong khoảng [0,1], thì ta có thể ngầm định rằng nếu giá trị hàm băm nằm trong khoảng [0, 0.5] thì bộ được truyền tới trạm S1, và nếu trong khoảng [0.5, 1] thì bộđược truyền tới trạm S2.

Xem xét nối ba quan hệ R1, R2, R3. Giả sử các quan hệ này nằm trên 2 trạm. Ta thấy sẽ có hai tình huống như sau: thực hiên nối trên cùng một thuộc tính (ví dụ A), hoặc chúng được thực hiện nối trên các thuộc tính khác nhau.

Tình huống thứ nhất: R1><A R2><A R3, ta sử dụng hàm băm như cách đã trình bày ở trên. 1 S S2 ) ( 11 A Fo F12e(A) ) ( ) ( 21 21 A F B Foo F22e (A)∪F22e (B) ) ( 31 B Fo F32o(B)

Hình 3. 15 Mô tả cách tạo bản sao cho bộ

Tình huống thứ hai: R1><A R2><B R3, nếu ta sử dụng cùng hàm băm cho thuộc

tính A và thuộc tính B thì có thể sẽ không thu được phụ thuộc vị trí bởi những lý do sau: Các bộ có giá trị lẻ trên thuộc tính A của R1 sẽ ở trạm S1, các bộ có giá trị lẻ trên thuộc tính B của R3 cũng sẽ ở trạm S1. Tuy nhiên, có thể có vài bộ của R2 có giá trị lẻ trên thuộc tính A và giá trị chẵn trên thuộc tính B, như vậy mỗi bộ này sẽ được ánh xạ bởi 2 hàm băm lên hai trạm khác nhau. Có một giải pháp cho phép các bộ này được sao lại trên cả hai trạm.

Thí dụ 3.3:

Trong hình 3.15, bộ của R2 có giá trị lẻ trên thuộc tính A và giá trị chẵn trên thuộc tính B sẽ nằm trong cả hai mảnh F21oF22e và được nhân bản trên cả hai trạm S1

S2. Mảnh Fij của quan hệRi phải được định vị trên trạm Sj trước khi thực hiện thao tác nối liên quan. Nói chung, một quan hệ có thể có nhiều thuộc tính tham gia nối với các quan hệ khác, và nếu một bộ của quan hệ (sau khi phân hoạch bởi các hàm băm) có liên quan đến các thuộc tính nối trên nhiều trạm khác nhau thì chúng phải được nhân bản lên các trạm này.

Một giải pháp khác, là ta sẽ thực hiên lần lượt từng phép nối: nối R1R2 trên thuộc tính A trước (sử dụng hàm băm) tạo ra quan hệ trung gian R4, sau đó thực hiện nối giữa R4R3 trên thuộc tính B (sử dụng hàm băm).

Với các trường hợp trên ta có những nhận xét như sau:

1. Nếu có i trạm, thì hàm băm như h(a)=j+1 với j=a mod i có thể được sử dụng, nghĩa là khi bộ có giá trị“a” chia i được số dưj thì bộđó được chuyển tới trạm Sj+1. Bằng cách đó bộ với giá trị cho trước trên thuộc tính nối được

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

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

(127 trang)