Tải bản đầy đủ (.docx) (24 trang)

Tiểu luận môn cơ sở dữ liệu nâng cao GIẢI THUẬT PHÂN MẢNH DỌC &CÀI ĐẶT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (458.73 KB, 24 trang )

Đại Học Quốc Gia TP.HCM
Trường Đại Học Công Nghệ Thông Tin
  
TIỂU LUẬN MÔN
CƠ SỞ DỮ LIỆU NÂNG CAO
Đề tài:
GIẢI THUẬT PHÂN MẢNH DỌC
& CÀI ĐẶT
GVHD: PGS.TS. ĐỖ PHÚC
Học viên: DAI NGUYÊN THIỆN
Lớp: Cao học khóa 6 Mã số: CH1101043
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

























Cài đặt thuật giải phân mảnh dọc Page 2
TP.HCM - 2012


MỤC LỤC
Cài đặt thuật giải phân mảnh dọc Page 3
I. GIỚI THIỆU
Những năm gần đây, hệ cơ sở dữ liệu phân tán được phát triển dựa trên cơ sở dữ
liệu và mạng máy tính. Cơ sở dữ liệu phân tán gồm nhiều cơ sở dữ liệu tích hợp lại với
nhau thông qua mạng máy tính để trao đổi dữ liệu, thông tin Cơ sở dữ liệu được tổ chức
và lưu trữ ở những vị trí khác nhau trong mạng máy tính và chương trình ứng dụng làm
việc trên cơ sở truy cập dữ liệu ở những điểm khác nhau đó.
Ngày nay, mô hình hoạt động của các tổ chức, công ty, doanh nghiệp, đơn vị kinh
doanh thường được tổ chức gồm nhiều cơ sở, chi nhánh, ở những địa điểm xa nhau.
Để giải quyết vấn đề tổ chức sao cho kinh doanh có hiệu quả nhất và nắm bắt thông tin
nhanh nhất thì việc xây dựng một hệ thống làm việc trên cơ sở dữ liệu phân tán là phù
hợp xu hướng hiện nay vì hệ thống này thoả mãn được những yêu cầu tổ chức của đơn vị.
Lợi điểm về tổ chức và kỹ thuật của xu hướng phát triển cơ sở dữ liệu phân tán là: giải
quyết được những hạn chế của cơ sở dữ liệu tập trung và phù hợp xu hướng phát triển tự
nhiên với cơ cấu không tập trung của các tổ chức, công ty, doanh nghiệp
Nói một cách đơn giản, cơ sở dữ liệu phân tán là tập hợp dữ liệu logic thuộc về
cùng một hệ thống nhưng trải rộng ra nhiều điểm trên mạng máy tính. Như vậy có hai
vấn đề của cơ sở dữ liệu phân tán với tầm quan trọng tương đương nhau:
Việc phân tán: Trong thực tế dữ liệu không đặt trên cùng một vị trí vì vậy đây là
đặc điểm để phân biệt cơ sở dữ liệu phân tán với cơ sở dữ liệu tập trung và cơ sở dữ liệu

đơn lẻ.
Liên quan logic: Trong cơ sở dữ liệu phân tán, dữ liệu có một số đặc tính liên kết
chặt chẽ với nhau như tính kết nối, tính liên quan logíc Trong cơ sở dữ liệu tập trung,
mỗi vị trí quản lý một cơ sở dữ liệu và người sử dụng phải truy cập đến cơ sở dữ liệu ở
những vị trí khác nhau để lấy thông tin tổng hợp.
Xây dựng một hệ CSDL phân tán là xu hướng hiện nay vì nó có nhiều ưu điểm
như ưu điểm về tổ chức và tính kinh tế, tận dụng những cơ sở dữ liệu sẵn có (hình thành
cơ sở dữ liệu phân tán từ các cơ sở dữ liệu tập trung có sẵn ở các vị trí địa phương), thuận
Cài đặt thuật giải phân mảnh dọc Page 4
lợi cho nhu cầu phát triển, Giảm chi phí truyền thông, tăng khả năng thực hiện công việc
thực hiện (do xử lý song song tại nhiều vị trí), …
Vấn đề là xây dựng và cài đặt một cơ sở dữ liệu phân tán. Cần giải quyết vấn đề
xây dựng và cài đặt cơ sở dữ liệu phân tán cụ thể như vấn đề thiết kế phân tán, thiết kế cơ
sở dữ liệu
Thiết kế một hệ CSDL phân tán cần quan tâm nhiều vấn đề, tiêu chí như mức độ
chia sẻ, kiểu mẫu truy xuất, mức độ hiểu biết về kiểu mẫu truy xuất hay chiến lược thiết
kế từ trên xuống hay từ dưới lên, … Một trong những vấn đề mấu chốt của thiết kế
CSDL phân tán là việc phân mảnh (ngang, dọc, hổn hợp). Trong phạm vi bài viết này,
chúng tôi sẽ trình bày lại tóm tắt lý thuyết phân mảnh dọc và cài đặt các thuật toán phân
mảnh dọc bằng C#
II. NỘI DUNG
1. Phân mảnh dọc
Phân mảnh dọc cho một quan hệ R sinh ra các mảnh R
1
, R
2
, …, R
n
. Mỗi mảnh con
R

i
chứa một tập con các thuộc tính của R và cả khóa 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 (các mảnh được bố trí tại các vị trí thích hợp). Một phân mảnh “tối
ưu” là một 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 các mảnh đó (cục bộ hóa các dữ liệu cần, tiết kiệm thời
gian và chi phí truyền dữ liệu qua mạng).
Phân mảnh dọc tối ưu khó và phức tạp hơn phân mảnh ngang. Có 2 cách tiếp cận
heuristic:
• 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 đề xuất lần đầu trong [Hammer and Niamir, 1979] cho
các CSDL tập trung và sau này được dùng trong [Sacca and Wiederhold,
1985] cho các CSDL phân tán.
Cài đặt thuật giải phân mảnh dọc Page 5
• Tách mảnh: bắt đầu bằng một quan hệ và quyết định cách phân hoạch có
lợi dựa trên hành vi truy xuất của các ứng dụng trên các thuộc tính. Kỹ
thuật này được thảo luận lần đầu cho thiết kế CSDL tập trung trong [Hoffer
and Severance, 1975] và sau đó được mở rộng cho môi trường phân tán
trong [Navathe et al., 1984].
Ở đây, ta chỉ xét kỹ thuật tách mảnh vì nó thích hợp với phương pháp thiết kế từ
trên xuống hơn. Măt khác, như được khẳng định trong [Navathe et al., 1984], giải pháp
tối ưu có lẽ gần với quan hệ đầy đủ hơn là một tập các mảnh chỉ có một thuộc tính. Hơn
nữa, kỹ thuật tách mảnh sinh ra các mảnh không gối chồng lên nhau. Trong khi phương
pháp nhóm thuộc tính thường tạo ra các mảnh gối chồng lên nhau.
Việc tách mảnh chỉ đề cập các thuộc tính không tham gia vào khóa chính. Tuy
nhiên, để bảo toàn tính toàn vẹn ngữ nghĩa, các mảnh đều chứa thuộc tính khóa. Đó chính
là việc nhân bản cho khóa của quan hệ toàn cục trong các mảnh. Đây là một đặc trưng
của phân mảnh dọc cho phép tái tạo lại quan hệ toàn cục.
2. Yêu cầu thông tin của phân mảnh dọc

Những thông tin chính cần cho phân mảnh dọc có liên quan đến các ứng dụng.
Phân mảnh dọc đặt vào trong một mảnh các thuộc tính thường được truy xuất chung với
nhau  người ta đặt ra một giá trị đo thể hiện tính thường đi chung với nhau. Đại lượng
này được gọi là “ái lực” (affinity) của các thuộc tính.
Yêu cầu dữ liệu chính liên quan đến các ứng dụng là tần số truy xuất (access
frequency) của chúng. Gọi Q = {q
1
, q
2
, …,q
q
} là tập các câu truy vấn của người dùng (các
ứng dụng) sẽ chạy trên quan hệ R(A
1
, A
2
, …, A
n
). Với mỗi câu truy vấn qi và mỗi thuộc
tính A
j
người ta đưa ra một giá trị sử dụng thuộc tính (attribute usage value), ký hiệu là
use(q
i
,A
j
) và được định nghĩa như sau:

a) Ma trận sử dụng thuộc tính, ma trận tần xuất truy cập, Ma trận ái
lực thuộc tính

Xét quan hệ PROJ
Cài đặt thuật giải phân mảnh dọc Page 6
PNO PNAME BUDGET LOC
P1
P2
P3
P4
Instrumentation
Database Development
CAD/CAM
Maintenance
150000
135000
250000
310000
Montreal
New York
New York
Paris
Giả sử các ứng dụng sau chạy trên quan hệ PROJ
Q1: tìm ngân sách của một dự án nếu biết mã số dự án
SELLECT BUDGET
FROM PROJ
WHERE PNO = Value
Q2: Tìm tên và ngân sách của tất cả mọi dự án
SELECT PNAME, BUDGET
FROM PROJ
Q3: Tìm tên của các dự án được thực hiện tại một thành phố đã cho
SELECT PNAME
FROM PROJ

WHERE LOC = Value
Q4: Tìm tổng ngân sách dự án cho mỗi thành phố
SELECT SUM(BUDGET)
FROM PROJ
WHERE LOC = Value
Để thuận tiện, chúng ta đặt:
A1 = PNO, A2 = PNAME, A3 = BUDGET, A4 = LOC
Giá trị sử dụng được định nghĩa dưới dạng ma trận (trong đó số hạng (i,j) biểu thị
use(q
i
,A
j
)
Cài đặt thuật giải phân mảnh dọc Page 7
Ma trận giá trị sử dụng thuộc tính
Độ đo ái lực thuộc tính giữa 2 thuộc tính Ai và Aj của quan hệ R[A1, A2, …, An]
ứng với tập quan hệ Q = (q
1
, q
2
, …, q
q
) được định nghĩa như sau:
Với ref
l
(q
k
) là số truy xuất đến các thuộc tính (A
i
,A

j
) cho mỗi thực hiện của ứng
dụng q
k
tại vị trí S
l
và acc
l
(q
k
) là số đo tần số truy xuất ứng dụng đã được định nghĩa
trước kia và được sửa đổi lại để gồm chứa cả các tần số tại các vị trí khác nhau.
Để cho đơn giản, giả sử rằng ref
l
(q
k
) = 1 cho tất cả q
k
và S
l
. Nếu tần số ứng dụng
là:
acc
1
(q
1
) = 15 acc
2
(q
1

) = 20 acc
3
(q
1
) = 10
acc
1
(q
2
) = 5 acc
2
(q
2
) = 0 acc
3
(q
2
) = 0
acc
1
(q
3
) = 25 acc
2
(q
3
) = 25 acc
3
(q
3

) = 25
acc
1
(q
4
) = 3 acc
2
(q
4
) = 0 acc
3
(q
4
) = 0
Hay viết lại dưới dạng ma trận tần xuất truy cập các câu truy vấn tại các Site (vị
trí):
 Số đo ái lực giữa các thuộc tính A
1
, A
3
là:
Kết quả tính toán là một ma trận n x n, mỗi phần tử của nó là một trong các số đo
được định nghĩa ở trên. Chúng ta gọi nó là ma trận ái lực thuộc tính AA (attribute affinity
matrix)
Ma trận ái lực thuộc tính
Cài đặt thuật giải phân mảnh dọc Page 8
b) Thuật toán gom cụm
Nhiệm vụ kế tiếp là từ ma trận ái lực AA và tổ chức lại các thứ tự của thuộc tính
để tạo các cụm có các thuộc tính ứng với cụm có độ ái lực cao hơn cụm khác
Trong [Hoffer and Severance, 1975] và [Navathe et al., 1984] đề xuất dùng thuật

toán năng lượng liên kết BEA (bond energy algorithm)
Thuật toán năng lượng liên kết BEA nhận đầu vào là ma trận ái lực thuộc tính AA,
thực hiện việc hoán vị các hàng cột để sinh ra ma trận ái lực gom cụm CA (clustered
affinity matrix). Hoán vị được thực hiện sao cho số đo ái lực chung AM (global affinity
measure) là lớn nhất
Trong đó
aff(A
0,
A
j
) = aff(A
i,
A
0
) = aff(A
n+1,
A
j
) = aff(A
i,
A
n+1
) = 0
các điều kiện này đề cập đến các trường hợp một thuộc tính được đặt vào CA ở
bên trái của thuộc tính ở cột đầu tiên hoặc bên phải của thuộc tính cột cuối cùng trong các
hoán vị cột và bên trên của hàng trên cùng hay bên dưới hàng cuối cùng trong các hoán
vị hàng.
Hàm cực đại chỉ xét những lân cận gần nhất, vì thế nó gom cụm các giá trị lớn với
nhau và các giá trị nhỏ với nhau. Vì ma trận ái lực thuộc tính AA có tính đối xứng nên ta
có thể viết lại công thức trên như sau:

c) Thuật toán năng lượng liên kết BEA
Nhập: ma trận AA
Xuất: Ma trận ái lực gom cụm CA là một sắp xếp của các hoán vị AA
 Khởi tạo: Đặt và cố định một trong các cột của AA vào CA.
 Lặp: Đặt n-i cột còn lại vào i+1 vị trí còn lại trong ma trận CA. Đối với từng
cột, chọn vị trí đóng góp (contribution) lớn nhất vào độ đo ái lực toàn cục.
 Sắp thứ tự dòng: Sắp xếp các dòng theo thứ tự cột.
Cài đặt thuật giải phân mảnh dọc Page 9
Begin
// khởi gán, nhớ AA là ma trận n x n
CA(*, 1)

AA(*, 1)
CA(*, 2)

AA(*, 2)
Index

3
While index <= n do //chọn vị trí tốt nhất cho thuộc tính AA
index
Begin
For i from 1 to index -1 by 1 do
Tính cont(A
i-1
, A
index,
A
i
)

End for
Tính cont(A
index-1
, A
index,
A
index+1
) //điều kiện biên
loc

nơi đặt, được cho bởi giá trị cont lớn nhất
For i from index to loc by -1 do
CA(*, j)

CA(*, j-1)
End for
CA(*, loc)

AA(*, index)
index

index +1
end while
sắp thứ tự các hàng theo thứ tự tương đối của các cột
End {BEA}
Để bước thứ hai của thuật toán hoạt động, chúng ta cần định nghĩa xem đóng góp
(contribution) của thuộc tính vào số đo ái lực mang ý nghĩa gì.
Ta đã có:
Viết lại:
Cài đặt thuật giải phân mảnh dọc Page 10

AM’
AM”
Chúng ta định nghĩa liên kết (bond) giữa 2 thuộc tính A
x
và A
y
là:
Ta có thể viết lại AM:
Xét n thuộc tính sau
A
1
A
2
….A
i-1
A
i
A
j
A
j+1
…. A
n
Số đo ái lực chung cho những thuộc tính này có thể được viết là:
AM
old
= AM’ + AM” + bond(A
i-1
,Ai) + bond(A
i

,A
j
) + bond(A
j
,Ai) + bond(A
j
,A
j+1
)
Bây giờ xét việc đặt một thuộc tính mới A
k
giữa các thuộc tính A
i
và A
j
trong ma
trận ái lực gom cụm CA. Số đo ái lực chung mới có thể viết như sau

Do đó, đóng góp thực (net contribution) cho số đo ái lực chung khi đặt thuộc tính
A
k
giữa A
i
và A
j


Thí dụ về xét quá trình gom cụm các thuộc tính của quan hệ PROJ
Theo thuật toán BEA, đầu tiên, ta chép cột 1(A
1

) và cột 2 (A
2
) của ma trận AA vào
ma trận CA
Cài đặt thuật giải phân mảnh dọc Page 11
Bắt đầu từ cột thứ 3 (A
3
): ta lần lượt đặt cột A
3
vào 3 nơi có thể và tính đóng góp
vào độ đo ái lực chung của mỗi khả năng này
• Bên trái cột 1 (thứ tự 0 – 3 – 1)
Với:

• Giữa cột 1 và cột 2 (thứ tự 1 – 3 – 2)

• Bên phải cột 2 (thứ tự 2 – 3 – 4)
Lưu ý là cột A
4
trong ma trận CA hiện vẫn là cột rỗng nên ta có:

Do đóng góp của thứ tự (1-3-2) là lớn nhất nên ta đặt cột A
3
vào giữa cột A
1
và A
2

(hình b)
Cài đặt thuật giải phân mảnh dọc Page 12

Tính toán tương tự cho cột A
4
chỉ ra rằng cần phải đặt cột A
4
bên phải của cột A
2
.
(hình c)
Cuối cùng, sắp lại thứ tự hàng như thứ tự cột ta được ma trận CA như hình d
d) Thuật toán phân hoạch
Chia tập các thuộc tính gom cụm {A1, A2, …, Am} thành hai (hay nhiều hơn) các
tập {A1, A2, …, Ai} và {A
i+1
, …, Am} sao cho không có (hay có tối thiểu) các ứng dụng
truy cập cả hai (hay nhiều hơn) các tập hợp chia này.
Xét ma trận ái lực gom cụm CA như hình dưới đây
Cài đặt thuật giải phân mảnh dọc Page 13
Điểm x trên đường chéo xác định 2 tập : tập {A1, A2, …, Ai} nằm ở góc trên bên
trái, còn tập {A
i+1
, …, Am}. Gọi tập thứ nhất là TA và tập thứ hai là BA
Xét tập ứng dụng Q = {q
1
, q
2
, …, q
q
}
Định nghĩa
• TQ = tập các ứng dụng chỉ truy cập TA

• BQ = tập các ứng dụng chỉ truy cập BA
• OQ = tập các ứng dụng truy cập cả TA và BA

• CTQ = tổng số các truy cập đến các thuộc tính bởi các ứng dụng chỉ truy
cập TA
• CBQ = tổng số các truy cập đến thuộc tính bởi ứng dụng chỉ truy cập BA
• COQ = tổng số các truy cập đến thuộc tính bởi ứng dụng truy cập cả TA và
BA
Ở đây, nảy sinh bài toán tối ưu hóa. Nếu có m thuộc tính trong một quan hệ thì sẽ
có n – 1 vị trí có thể là điểm phân chia trên đường chéo của ma trận ái lực gom cụm CA
của quan hệ đó. Vị trí tốt nhất để phân chia là vị trí tạo ra các tập TQ và BQ sao cho tổng
Cài đặt thuật giải phân mảnh dọc Page 14
các truy xuất chỉ một mảnh là lớn nhất và tổng các truy xuất cả hai mảnh là nhỏ nhất. Vì
thế, chúng ta định nghĩa các công thức tính chi phí như sau
Mỗi công thức trên đếm tổng số truy xuất đến các thuộc tính bởi các ứng dụng
trong các lớp tương ứng của chúng. Dựa trên số liệu này, bài toán tối ưu hóa ở trên là bài
toán tìm điểm x (1 ≤ x ≤ n) sao cho biểu thức
có giá tri.lớn nhất
Thuật toán PARTITION
// Nhập: CA: ma trận ái lực gom cụm, R: quan hệ, use: ma trận sử dụng thuộc tính,
acc: ma trận tần số truy xuất
// Xuất: 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 công thức chi phí chỉ ra điểm tách}
Tính CTQ
n-1
Tính CBQ
n-1
Tính COQ

n-1
best := CTQ
n-1
* CBQ
n-1
– (COQ
n-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 CTQ
i
Cài đặt thuật giải phân mảnh dọc Page 15
Tính CBQ
i
Tính COQ
i
z := CTQ
i
* CBQ
i
– COQ
i
2
if z > best then
begin
best := z

Ghi nhận điểm tách vào 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
R
1
:= π
TA
(R)

K {K là tập thuộc tính khóa chính của R}
R
2
:= π
BA
(R)

K
F := {R
1
, R
2
}
end. {PARTITION}
Cài đặt thuật giải phân mảnh dọc Page 16
Áp dụng thuật toán cho ma trận CA trong thí dụ trên  có 3 phương án chia
CA A1 A3 A2 A4 use A1 A2 A3 A4

A1 45 45 0 0 q
1
1 0 1 0
CA A3 45 53 5 3 q
2
0 1 1 0
A2 0 5 80 75 q
3
0 1 0 1
A4 0 3 75 78 q
4
0 0 1 1
acc S
1
S
2
S
3
S
4
… Sum
q
1
15 20 10 45
q
2
5 0 0 5
Có ba phương án chia: q
3
25 25 25 75

Phương án 1: q
4
3 0 0 3
TA = {A1}
BA = {A3,A2,A4}
TQ = {} (TQ gồm những truy vấn q mà có AQ(q) là "con" của TA)
BQ = {q2,q3,q4} (BQ gồm những truy vấn q mà có AQ(q) là "con" của BA)
OQ = {q1} (OQ gồm những truy vấn q còn lại của Q.)
CTQ
=
0 (Từ ma trận acc: Xem TQ gồm những q nào: cộng tất cả các S dòng q đó )
CBQ
=
83 (Từ ma trận acc: Xem BQ gồm những q nào: cộng tất cả các S dòng q đó )
COQ
=
45 (Từ ma trận acc: Xem OQ gồm những q nào: cộng tất cả các S dòng q đó )
Tính:
CTQ*CBQ - COQ
2
= -2025
Phương án 2:
TA = {A1,A3}
BA = {A2,A4}
Tương tự trên:
TQ = {q1} (TQ gồm những truy vấn q mà có AQ(q) là "con" của TA)
BQ = {q3} (BQ gồm những truy vấn q mà có AQ(q) là "con" của BA)
OQ = {q2,q4} (OQ gồm những truy vấn q còn lại của Q.)
CTQ
=

45 (Từ ma trận acc: Xem TQ gồm những q nào: cộng tất cả các S dòng q đó )
Cài đặt thuật giải phân mảnh dọc Page 17
CBQ
=
75 (Từ ma trận acc: Xem BQ gồm những q nào: cộng tất cả các S dòng q đó )
COQ
=
8 (Từ ma trận acc: Xem OQ gồm những q nào: cộng tất cả các S dòng q đó )
Tính:
CTQ*CBQ - COQ
2
= 3311
Phương án 3:
TA = {A1,A3, A2}
BA = {A4}
Tương tự trên:
TQ = {q1,q2} (TQ gồm những truy vấn q mà có AQ(q) là "con" của TA)
BQ = { } (BQ gồm những truy vấn q mà có AQ(q) là "con" của BA)
OQ = {q3,q4} (OQ gồm những truy vấn q còn lại của Q.)
CTQ
=
50 (Từ ma trận acc: Xem TQ gồm những q nào: cộng tất cả các S dòng q đó )
CBQ
=
0 (Từ ma trận acc: Xem BQ gồm những q nào: cộng tất cả các S dòng q đó )
COQ
=
78 (Từ ma trận acc: Xem OQ gồm những q nào: cộng tất cả các S dòng q đó )
Tính:
CTQ*CBQ - COQ

2
= -6084
So sánh phương án 1 , phương án 2 và phương án 3 thấy " CTQ*CBQ - COQ
2
" của phương án 2
lớn hơn
→ Chọn phương án chia 2. Tức là chia thành mảnh {A1,A3} và {A2,A4}
Kết quả cuối cùng của việc phân mảnh dọc quan hệ PROJ từ thí dụ xét ở trên cho
ta 2 mảnh
PROJ
1
= {A
1,
A
3
} = {PNO, BUDGET}
PROJ
2
= {A
1,
A
2
, A
4
} = {PNO, PNAME, LOC}
Cài đặt thuật giải phân mảnh dọc Page 18
e) Kiểm tra tính đúng đắn
i. 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. Với điều kiện là tập thuộc tính A của quan hệ R

thỏa
A = ∪ R
i
Thì tính đúng đắn của phân mảnh dọc được bảo đảm
ii. Tính tái thiết được
Có thể xây dựng lại quan hệ ban đầu bằng phếp nối. Đối với qua hệ R có phân
mảnh dọc F
R
= {R
1
, R
2
, …, R
r
} và các thuộc tính khóa K

Do vậy, nếu điều kiện mỗi R
i
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 R
i
phải chứa các thuộc tính khóa của R hoặc chứa một mã TID
được gán bởi hệ thống
iii. Tính tách biệt
Tích tách biệt trong phân mảnh dọc không quan trọng như trong phân mảnh
ngang. Có 2 trường hợp cần xem xét ở đây:
Nếu dùng TID thì các mảnh tách biệt vì TID được nhân bản trong mỗi mảnh đều
do hệ thống gán và là những thực thể đã được quản lý và người dùng hoàn toàn không
nhìn thấy được.
Nếu các thuộc tính khóa được nhân bản trong mỗi mảnh  không thể nói chúng

tách biệt theo đúng nghĩa thuật ngữ này. Tuy nhiên, các khóa trùng lặp không được hệ
thống biết và quản lý và không có cùng kết quả như tình huống trùng lặp trong các mảnh
được phân mảnh ngang. Nói cách khác, với điều kiện các mảnh “tách biệt” ở các thuộc
tính không phải khóa thì có thể tam.coi như là chúng tách biệt
3. CHẠY CHƯƠNG TRÌNH (vf.exe)
Mở thư mục VF, click file vf.exe để chạy chương trình
Cài đặt thuật giải phân mảnh dọc Page 19
Giao diện chương trình
Chọn số thuộc tính, số query, và số Site bằng cách chọn từ các combobox (mỗi lần chọn
 ma trận liên quan sẽ được reset -vẽ lại với giá trị mặc định 0)
Nhập giá trị cho ma trận sử dụng và ma trận tần xuất truy cập
Nhấp nút “Phân mảnh”
Chương trình cho kết quả
Cài đặt thuật giải phân mảnh dọc Page 20
Có thể lập lại cho bài toán khác bằng cách lập lại các bước trên.
4. CÀI ĐẶT CHƯƠNG TRÌNH
Chương trình gồm class matran và một số hàm như mô tả bên dưới. Lưu ý các ma
trận và một số control được khai báo động (run time). Ma trận được khai báo dưới dạng
mảng Textbox 2 chiều
Source code của chương trình kèm theo đĩa CD nộp chung của lớp
class matran có các mảng Label (tên thuộc tính, site, query, …) và mảng Textbox
2 chiều
public class matran
{
private int msohang=0;
private int msocot=0;
private Label[] mtenhang;
private Label[] mtencot;
Cài đặt thuật giải phân mảnh dọc Page 21
private TextBox[,] mmatran;

public matran(int hang, int cot)


public TextBox[,] matrix
public int sohang
public int socot
public Label[] tenhang
public Label[] settenhang(string st)
public void setnullhang()
public void setnullcot()
public void setnullmatran()
public Label[] tencot
public Label[] settencot(string st)
}
public void vematran(matran M, int x, int y, string rowname, string colname)
Hàm vẽ ma trận: tham số
• matran M: ma trận cần vẽ lên màn hình
• int x, int y: tọa độ x, y nơi sẽ vẽ ma trận
• string rowname, string colname: tên hàng, tên cột (A, Q, S)
hàm này sẽ vẽ ra màn hình lân lượt mảng Label chứa tên hàng, tên cột của ma trận
M, sau đó vẽ ma trận là mảng 2 chiều các Textbox
public void xoamatran(matran m)
Hàm xóa ma trận m
public void vematranAA(matran M, int x, int y)
Tham số: matran M: ma trận AA, intx, int y: tọa độ vẽ ma trận
Xử lý: tính (từ ma trận sử dụng thuộc tính và ma trận tần suất sử dụng) và vẽ ma
trận AA
public void vematranCA(matran M, int[] ord,int x, int y)
Tham số: matran M: ma trận CA, intx, int y: tọa độ vẽ ma trận
Xử lý: tính (từ ma trận AA và mảng int[] ord) và vẽ ma trận CA

public int bond(matran a, int i, int j)
tính độ liên kết giữa 2 thuộc tính A
i
và A
j
của ma trận a (ma trận AA)
public int cont(matran a,int i, int k, int j)
Cài đặt thuật giải phân mảnh dọc Page 22
tính đóng góp thực (net contribution) cho số đo ái lực chung khi đặt thuộc tính A
k
giữa A
i
và A
j
public int[] thutuCA()
Xử lý: tính theo thuật toán năng lượng liên kết BEA và cho kết quả là mảng int[]
ord lưu lại thứ tự các thuộc tính của ma trận CA
public string phanmanh(int[] ord)
Tham số int[] ord : mảng lưu thứ tự thuộc tính của ma trận CA
Xử lý: tính phân mảnh theo thuật toán PARTITION
private void cboSoTT_SelectedIndexChanged(object sender, EventArgs e)
Hàm xử lý sự kiện khi người dùng chọn số thuộc tính: xóa các ma trận cũ, lưu lại
các giá trị số thuộc tính, số query, số Site vào các bien mSoTT, mSoQuery, mSoSite, vẽ
lại ma trận sử dụng thuộc tính và ma trận tần suất sử dụng mới
private void cboSoQuery_SelectedIndexChanged(object sender, EventArgs e)
Hàm xử lý sự kiện khi người dùng chọn số Query, thực hiện giống y như hàm xử
lý sự kiện chọn số thuộc tính
private void cboSoSite_SelectedIndexChanged(object sender, EventArgs e)
Hàm xử lý sự kiện khi người dùng chọn số Site, thực hiện giống y như hàm xử lý
sự kiện chọn số thuộc tính

private void btnDefrag_Click(object sender, EventArgs e)
Hàm xử lý sự kiện khi người dùng nhấp chuột vào nút Phân mảnh. Xử lý: xóa rồi
tính và vẽ lại các ma trận AA và CA, tính phân mảnh và hiện kết quả phân mảnh
III.KẾT LUẬN
Thử nghiệm chương trình cho thấy chạy tốt và có thể thực hiện lại với số liệu từ
bài toán khác.
Các ma trận là các mảng control Textbox được khai báo trong quá trình chạy 
khi thay đổi số thuộc tính, số query, số Site chương trình vẫn thể hiện đúng trong ngữ
cảnh mới.
Cài đặt thuật giải phân mảnh dọc Page 23
Tuy nhiên, các kết quả tính toán trung gian không hiển thị ra trong quá trình chạy
chương trình.
IV. TÀI LIỆU THAM KHẢO
[1] PGS.TS. Đỗ Phúc. Slide Bài giảng CSDL phân tán. ĐHCNTT-ĐHQG TPHCM
[2] M. Tamer Özsu, Patrick Valduriez. Nguyên lý các hệ cơ sở dữ liệu phân tán. (bản dịch:
Trần Đức Quang) Nhà xuất bản Thống Kê
Xin chân thành cảm ơn Thầy đã truyền đạt lại cho chúng em những ý tưởng, bài
học rất hay những kiến thức mới, bổ ích và nhất là lòng nhiệt huyết, đam mê nghiên cứu
khoa học.
TP.HCM, ngày 18 tháng 08 năm 2012
Sinh viên thực hiện
Dai Nguyên Thiện
Cài đặt thuật giải phân mảnh dọc Page 24

×