(a) vấn tin có vịng (b) Vấn tin khơng vịng tương đương

Một phần của tài liệu bài giảng cơ sở dữ liệu phân tán chuẩn (Trang 96 - 100)

- Một câu vấn tin gọi là sai nghĩa nếu các thành phần của nó khơng tham gia vào việc tạo ra kết quả.

(a) vấn tin có vịng (b) Vấn tin khơng vịng tương đương

Ở thí dụ hình b, trong đó cung (ET, PT) được loại bỏ, vị từ được thêm vào ET.CITY= ASG.CITY và ASG.CITY= PT.CITY kéo theo ET.CITY=PT.CITY nhờ tính bắc cầu. Vì thế câu vấn tin khơng vịng tương đương với vấn tin có vịng. Việc thêm những vị từ này dấn đến việc thêm thuộc tính CITY trong quan hệ ASG. Vì thế các giá trị cho thuộc tính CITY phải được gửi tới ET hoặc ASG.

Mặc dù trình rút gọn hồn tồn cho các vấn tin cây có tồn tại, bài tốn tìm ra chúng thuộc loại NP-hard. Tuy nhiên có một lớp vấn tin quan trọng gọi là vấn tin mắt xích (chained query) có một thuật tốn đa thức cho chúng. Một vấn tin mắt xích có một đồ thị nối, trong đó các quan hệ có thể được sắp thứ tự , và mối quan hệ chỉ nối với quan hệ kế tiếp theo thứ tự đó.Thí dụ câu vấn tin trong hình tren là một vấn tin mắt xích. Do rất khó cài đặt một thuật tốn với các trình rút gọn hồn tồn, phần lớn các hệ thống đều dùng các nối nửa đơn lẻ để rút gọn kích thước quan hệ.

So sánh nối và nối nửa

Nếu so sánh nối và nối nửa phải thực hiện nhiều phép toán hơn nhưng rất có thể trên các tốn hạng nhỏ hơn. Hình trên minh họa những khác biệt này qua một cặp chiên lược nối và nối nửa tương đương cho câu vấn tin có đồ thị nối giữa 3 quan hệ (NV PC DA). Hai quan hệ NV PC trong hình được thực hiện bằng cách gửi một quan hệ, chẳng hạn PC đến vị trí của quan hệ kia NV và hồn tồn nối tại vị trí đó. Tuy nhiên khi dùng nối nửa thì trành phải truyền quan hệ NV. Thay vào đó là truyền các giá trị thuộc tính nối của NV đến vị trí của PC, sau đó là truyền các bộ đối so sánh được của quan hệ PC đến vị trí của quan hệ NV, rồi hồn tất nối ở đó. Nếu chiều dài thuộc tính nối nhở hơn chiều dài của một bộ và nối nửa có độ tuyển chọn tốt

DA DA NV NV PC πMDA Phương pháp nối NV DA πMNV PC NV

thì phương pháp nối nửa có thể làm tăng thời gian xử lý cục bộ bởi vì một trong hai quan hệ được nối phải truy xuất hai lần. Thí dụ các quan hệ NV và DA được truy xuất hai lần. Hơn nữa nối của hai quan hệ trung gian sinh ra từ nối nửa không tận dụng được chỉ mục có sẵn trên quan hệ cơ sở. Vì thế sử dụng nối nửa có thể khơng phải là ý kiến hay nếu thời gian truyền dữ liệu không phải là yếu tố chiếm ưu thế như trường hợp các mạng cục bộ.

Nối nửa vẫn có ích trong các mạng tốc độ cao nếu chúng ta có độ tuyển chọn rất tốt và được cài đặt bằng các mảng bit Một mảng bit BA[1:n] rất có ích trong việc mã hóa các giá trị thuộc tính nối có trong quan hệ. Chúng ta hãy xét nối nửa R |>< S. Thế thì BA[i] được đặt là 1 nếu tồn tại một giá trị thuộc tính nối A al trong quan hệ S sao cho h(val) = i trong đó h là một hàm băm. Bằng khơng thì BA[i] được đặt bằng 0. Một mảng bit như thế sẽ nhỏ hơn nhiều so với một danh sách các giá trị thuộc tính nối. Vì thế truyền một mảng bit thay vì giá trị thuộc tính nối đến vị trí của quan hệ R sẽ tiết kiệm được thời gian truyền tin. Nối nửa có thể được thực hiện như sau. Mỗi bộ của quan hệ R có giá trị thuộc tính nối là val sẽ thuộc về nối nửa nếu BA[h(val)] = 1.

Một phần của tài liệu bài giảng cơ sở dữ liệu phân tán chuẩn (Trang 96 - 100)