Chương 3 MỘT SỐ ĐỀ XUẤT KHÁC VỀ XỬ LÝ PHÉP NỐI TRONG CÁC HỆ CSDL
3.2 Một số phương án tiếp cận xử lý nối phân tán khác
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 F11o và F11e, và F12 được phân hoạch thành F12o và F12e, với ký hiệu o và 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ó F11' thu được tại trạm S1 bởi hợp của hai mảnh F11o và F12o.
Tương tự ta có F21' và F22' 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 ∏A(F11') và ∏A(F22' ) 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 F11' ><F22' =φ, có nghĩa là
có phụ thuộc vị trí trên thuộc tính A giữa R1 và R2 (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 (F11' ><A F21' )∪(F21' ><F22' ). 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.
S1 S2
)
11(A
Fo F12e(A) )
( )
( 21
21 A F B
Fo ∪ o 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 F21o và F22e và được nhân bản trên cả hai trạm S1 và 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 R1 và R2 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 R4 và R3 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 ánh xạ tới một trong số i trạm, với j∈[0,i−1].
2. Ta có thể sử dụng một phương án khác để phân hoạch quan hệ/mảnh dựa trên khoảng giá trị của thuộc tính nào đó. Thí dụ nếu thuộc tính nối A có giá trị trong khoảng [cận dưới, cận trên], thì khoảng giá trị này có thể được chia thành các i khoảng rời nhau [cận dưới, a1], (a1,b1],…,(ai−1, cận trên], sao cho bộ nằm trong khoảng [cận dưới, ai] được chuyển tới trạm S1, bộ trong khoảng (aj,bj] chuyển tới trạm Sj+1 với 1≥ j≥i−2, và bộ trong khoảng (ai−1, cận trên] chuyển tới trạm Si. Phương pháp này này được gọi là phân hoạch trên khoảng.
3. Và chúng ta cũng cần quan tâm đến việc kết hợp giữa hai phương pháp trong tình huống thứ hai.