Một phân mảnh dọc cho một quan hệ R sinh ra các mảnh R1, R2,..,Rr, mỗi mảnh chứa một tập con thuộc tính của R và cả khoá của 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 để nhiều ứng dụng chỉ cần chạy trên một mảnh. Một phân mảnh “tối ƣu” là phân mảnh sinh ra một lƣợc đồ phân mảnh cho phép giảm tối đa thời gian thực thi các ứng dụng chạy trên mảnh đó [2].
Phân mảnh dọc phức tạp hơn so với phân mảnh ngang. Điều này là do tổng số chọn lựa có thể của một phân hoạch dọc rất lớn.
Vì vậy để có đƣợc các lời giải tối ƣu cho bài toán phân hoạch dọc thực sự rất khó khăn. Vì thế lại phải dùng các phƣơng pháp may rủi (heuristic). Chúng ta đƣa ra hai loại may rủi cho phân mảnh dọc các quan hệ toàn cục.
1. Nhóm thuộc tính: Bắt đầu bằng cách gán mỗi thuộc tính cho một mảnh, và tại mỗi bƣớc, nối một số mảnh lại cho đến khi thỏa một tiêu chuẩn nào đó. Kỹ thuật này đƣợc đƣợc đề xuất lần đầu cho các CSDL tập trung và về sau đƣợc dùng cho các CSDL phân tán.
2. Tách mảnh: Bắt đầu bằng một quan hệ và quyết định cách phân mảnh có lợi dựa trên hành vi truy cập của các ứng dụng trên các thuộc tính.
Bởi vì phân hoạch dọc đặt vào một mảnh các thuộc tính thƣờng đƣợc truy cập chung với nhau, chúng ta cần có một giá trị đo nào đó để định nghĩa chính xác hơn về khái niệm “chung với nhau”. Số đo này gọi là tụ lực hay lực hút của thuộc tính, chỉ ra mức độ liên đới giữa các thuộc tính.
- 25 -
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Yêu cầu dữ liệu chính có liên quan đến các ứng dụng là tần số truy cập 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, A2,…,An). Với mỗi câu vấn tin qi và mỗi thuộc tính Aj, chúng ta sẽ đƣa ra một giá trị sử dụng thuộc tính, ký hiệu use(qi, Aj) đƣợc định nghĩa nhƣ sau: 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.
Các véctơ use(qi, ) cho mỗi ứng dụng rất dễ định nghĩa nếu nhà thiết kế biết đƣợc các ứng dụng sẽ chạy trên CSDL.
Giá trị sử dụng thuộc tính không đủ để 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. Số đo lực hút của các thuộc tính aff(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 cập, sẽ là một đại lƣợng cần thiết cho bài toán phân mảnh.
Xây dựng công thức để đo lực hút của hai thuộc tính Ai, Aj. Gọi k là số các mảnh của R đƣợc phân mảnh. Tức là R = R1 ….Rk. Q= {q1, q2,…,qm} là tập các câu vấn tin (tức là tập các ứng dụng chạy trên quan hệ R). Đặt Q(A, B) là tập các ứng dụng q của Q mà use(q, A).use(q, B) =1.
Nói cách khác: Q(A, B) = {q Q: use(q, A) =use(q, B) = 1}; Số đo lực hút giữa hai thuộc tính Ai, Aj đƣợc định nghĩa là:
aff(Ai, Aj)= refl (qk)accl(qk)
qk Q(Ai, Aj) l Rl
Hoặc:
aff(Ai, Aj)= refl (qk)accl(qk)
Use(qk, Ai)=1 Use(qk, Aj)=1 Rl
Trong đó refl (qk) là số truy cập đến các thuộc tính (Ai, Aj) cho mỗi ứng dụng qk tại vị trí Rl và accl(qk) là số đo tần số truy cập ứng dụng qk đến các thuộc tính Ai,
- 26 -
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Aj tại vị trí l. Lƣu ý, trong công thức tính aff (Ai, Aj) chỉ xuất hiện các ứng dụng q mà cả Ai và Aj đều sử dụng.
Kết quả của tính toán này là một ma trận đối xứng n x n, mỗi phần tử của nó là một số đo đƣợc định nghĩa ở trên. Chúng ta gọi nó là ma trận lực tụ (lực hút hoặc ái lực) thuộc tính (AA) [07].
Kiểm tra tính đúng đắn: Tính đầy đủ đƣợc bảo đảm bằng thuật toán PARTITION vì mỗi thuộc tính của quan hệ toàn cục đƣợc đƣa vào một trong các mảnh.
Thuật toán PARTITION:
Input: CA: ma trận ái lực tụ; R: quan hệ; ref: ma trận sử dụng thuộc tính; acc: ma trận tần số truy cập;
Output: F: tập các mảnh; Begin
{xác định giá trị z cho cột thứ nhất}
{các chỉ mục trong phƣơng trình chi phí chỉ ra điểm tách} tính CTQn-1 tính CBQn-1 tính COQn-1 best CTQn-1*CBQn-1 – (COQn-1)2 do {xác định cách phân hoạch tốt nhất} begin for i from n-2 to 1 by -1 do begin tính CTQi tính CBQi tính COQi z CTQi*CBQi – (COQi)2 if z > best then begin best z
ghi nhận điểm tách bên vào trong hành động xê dịch end-if
end-for
gọi SHIFT(CA) end-begin
until không thể thực hiện SHIFT đƣợc nữa Xây dựng lại ma trận theo vị trí xê dịch
- 27 -
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
R1 TA(R) K {K là tập thuộc tính khoá chính của R} R2 BA(R) K
F {R1, R2} End. {partition}
Tính tái thiết đƣợc: đối với quan hệ R có phân mảnh dọc FR={R1, R2,...., Rr} và các thuộc tính khoá K
R=K Ri, Ri FR
Do vậy nếu điều kiện mỗi Ri là đầy đủphép toán nối sẽ tái thiết lại đúng R. Một điểm quan trọng là mỗi mảnh Ri phải chứa các thuộc tính khoá của R.