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 F1i và R2. 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í trên (gọi là thời gian kết thúc – finish time) tại trạm S1 được biểu thị bởi
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