Phân mảnh dọc chia một quan hệ R ra các quan hệ con (mảnh) R1, R2,..Rr.
Mỗi mảnh chứa một tập con các thuộc tính cùng với khóa của quan hệ R. Mục
đích của phân mảnh dọc là phân hoạch một quan hệ thành một tập các quan hệ nhỏ hơn, để có nhiều ứng dụng chỉ cần chạy trên một mảnh, điều này sẽ làm giảm đáng kể chi phí. Nhƣ vậy một cách phân mảnh tối ƣu là phân mảnh để thời gian thực thi các ứng dụng chạy trên các mảnh đó là nhỏ nhất.
Phân mảnh dọc đƣợc nghiên cứu cho cả CSDL tập trung lẫn phân tán, tập trung là sử dụng nó làm công việc thiết kế, cho phép vấn tin chỉ với các quan hệ nhỏ hơn, nên giảm đƣợc số truy nhập vào các trang. Khi xác định đƣợc các quan hệ con đƣợc tham chiếu nhiều nhất thì đặt chúng vào “phần” bộ nhớ có tốc độ truy cập nhanh nhất (nếu có sự hỗ trợ về phân cấp bộ nhớ).
Phân mảnh dọc phức tạp hơn phân mảnh ngang, vì số lựa chọn có thể có của phân mảnh dọc là rất lớn. Trong phân mảnh ngang, nếu tổng các vị từ đơn giản của tập Pr là n thì số mảnh ngang có thể có tối đa là 2n (vì có 2n vị từ hội sơ cấp) chƣa nói trong số chúng có một số vị từ tƣơng đƣơng, có thể bỏ bớt, do đó sẽ làm giảm số mảnh phải xem xét. Còn trong phân mảnh dọc nếu một quan hệ có m thuộc tính không phải là khóa thì số mảnh dọc có thể có sẽ là số Bell của
m. Với m đủ lớn thì số Bell xấp xỉ mm. Qua những minh chứng này cho thấy để
tìm các phân mảnh dọc tối ƣu là bài toán heuristic. Hai loại heuristic cho phân mảnh dọc các quan hệ toàn cục là:
- Các yêu cầu thông tin của phân mảnh dọc:
Các thông tin chính cần cho phân mảnh dọc liên quan đến các ứng dụng. Vì thế, chúng ta bàn về các điều kiện cho các ứng dụng sẽ chạy trên CSDL phân tán. Bởi vì phân mảnh dọc đặt vào một mảnh các thuộc tính thƣờng đƣợc truy xuất chung với nhau, chúng ta cần có một giá trị đo đạc đƣợc nào đó để định nghĩa chính xác hơn về khái niệm "chung với nhau". Số đo này đƣợc gọi là ái lực (affinity) của thuộc tính, nó chỉ ra mức độ liên đới giữa các thuộc tính. Nhƣng điều không tực tế là chúng ta không thể hy vọng nhà thiết kế hoặc ngƣời sử dụng có khả năng mô tả đƣợc những giá trị này. Chúng ta sẽ nghiên cứu cách để thu đƣợc các giá trị này từ các dữ liệu nguyên thủy hơn.
- Các yêu cầu dữ liệu:
Yêu cầu dữ liệu có liên quan đến các ứng dụng gọi là tần số truy xuất (access frequency) của chúng. Gọi Q={q1, q2,… qq} là tập các vấn tin của ngƣời dùng (các ứng dụng) sẽ chạy trên quan hệ R(A1,…An). Thế thì với mỗi câu vấn tin qivà mỗi thuộc tính Aj chúng ta đƣa ra một gía trị sử dụng thuộc tính ký hiệu là use(qi, Aj) và đƣợc định nghĩa nhƣ sau:
Các véc tơ use(qi, A#) cho mỗi ứng dụng rất dễ định nghĩa nếu nhƣ nhà thiết kế biết đƣợc các ứng dụng sẽ chạy trên CSDL.
Ví dụ:
Giả sử các ứng dụng sau đây chạy trên quan hệ DuAn trong mỗi trƣờng hợp chúng ta đều thể hiện bởi SQL.
q1 : Tìm ngân sách của một dự án, cho biết mã số dự án. SELECT NganSach
FROM DuAn
WHERE MaDuAn = Value
q2 : Tìm tên và ngân sách của mọi dự án. SELECT TenDuAn, NganSach
FROM DuAn
q3 : Tìm tên của mọi dự án đƣợc thực hiện tại một thành phố đã cho. SELECT TenDuAn
FROM DuAn WHERE ViTri = Value
q4 : Tìm tổng ngân sách dự án cho mỗi thành phố. SELECT SUM(NganSach)
FROM DuAn WHERE ViTri = Value
Dựa theo 4 ứng dụng này, chúng ta có thể định nghĩa đƣợc giá trị sử dụng
thuộc tính. Chúng ta gọi A1 = MaDuAn, A2 = TenDuAn, A3 = NganSach và A4
= ViTri. Giá trị sử dụng đƣợc định nghĩa dƣới dạng ma trận trong đó ô tại (i,j)
biểu thị use(qi, Aj) (mô tả nhƣ hình 3 dƣới)
use(qi, Aj) = 1 nếu thuộc tính Aj đƣợc vấn tin qi tham chiếu 0 trong trƣờng hợp ngƣợc lại
A 1 A 2 A 3 A 4 q1 1 0 1 0 q2 1 0 1 0 q3 1 0 1 0 q4 1 0 1 0
Hình 1.3. Ma trận mẫu về giá trị sử dụng thuộc tính
Giá trị sử dụng thuộc tính không đủ tổng quát để làm cơ sở cho việc tách và phân mảnh. Điều này là do chúng không biểu thị cho độ lớn của tần số ứng dụng (Ai, Aj ) biểu thị cho cầu nối giữa hai thuộc tính của một quan hệ theo cách chúng đƣợc các ứng dụng truy xuất. Số đo ái lực thuộc tính giữa hai thuộc tính
Ai và Aj của quan hệ R(A1,…An) ứng với tập ứng dụng Q = {q1,…,qq} đƣợc định nghĩa là: 1 1 (us ( , ) 1) us ( , ) 1 aff(A , A ) = ef ( ) ( ) k i k j i i j k k k e q A e q A S r q acc q
Trong đó refl(qk) là số truy xuất đến các thuộc tính (Ai, Aj) cho mỗi thực hiện của ứng dụng qktại vị trí Sl và accl (qk) là số đo tấn số truy xuất ứng dụng đã đƣợc định nghĩa trƣớc và đƣợc sửa đổi lại để chứa tất cả các tần số tại các vị trí khác nhau.