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

Phương pháp phân mảnh dọc trong CSDL phân tán

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 (359.17 KB, 18 trang )

Phương pháp phân mảnh dọc trong CSDL phân tán 1
MỤC LỤC
LỜI MỞ ĐẦU 2
PHẦN NỘI DUNG 3
I. TỔNG QUAN VỀ THIẾT KẾ PHÂN MẢNH TRONG CSDL PHÂN TÁN 3
1. Lý do phân mảnh 3
2. Các phương pháp phân mảnh 3
3. Các quy tắc phân mảnh 3
II. PHƯƠNG PHÁP PHÂN MẢNH DỌC 4
1. Giá trị sử dụng thuộc tính và tần xuất truy xuất ứng dụng 5
2. Thuật toán BEA tìm ma trận ái lực tụ 8
3. Thuật toán phân hoạch thuộc tính 12
III. CHƯƠNG TRÌNH DEMO 14
KẾT LUẬN 17
TÀI LIỆU THAM KHẢO 18
Phương pháp phân mảnh dọc trong CSDL phân tán 2
LỜI MỞ ĐẦU
Ngày nay cùng với sự phát triển toàn cầu hóa là sự bùng nổ của các công ty và
tập đoàn đa quốc gia. Mỗi công ty, tập đoàn quản lý hoạt động qua một hệ thống dữ
liệu phân tán khắp nơi đã cho thấy vai trò to lớn của cơ sở dữ liệu phân tán trong lĩnh
vực công nghệ thông tin và hoạt động kinh doanh.
Nói đến cơ sở dữ liệu phân tán thì không thể không nói đến việc thiết kế phân tán.
Để phân tán cơ sở dữ liệu có hai hoạt động chính đó là: Phân mảnh các quan hệ và
Phân tán các quan hệ (cấp phát các mảnh). Trong đó phân mảnh là bước trước tiên.
Phân mảnh các quan hệ có tác dụng rất lớn, nó giúp làm tăng mức độ hoạt động đồng
thời của cả hệ thống, tăng lưu lượng hoạt động của hệ thống… Nó là một bước trọng
tâm trong việc thiết kế cơ sở dữ liệu phân tán. Tiểu luận này xin được trình bày về một
trong các phương pháp phân mảnh là phương pháp phân mảnh dọc cùng một chương
trình demo thuật toán dùng để phân mảnh dọc.
Em xin chân thành cảm ơn thầy PGS. TS Đỗ Phúc, giảng viên phụ trách môn cơ
sở dữ liệu nâng cao đã tận tình truyền đạt những kiến thức quý báu giúp em hoàn thành


bài tiểu luận này.
Phương pháp phân mảnh dọc trong CSDL phân tán 3
PHẦN NỘI DUNG
I. TỔNG QUAN VỀ THIẾT KẾ PHÂN MẢNH TRONG CSDL PHÂN
TÁN
1. Lý do phân mảnh
Trước tiên, khung nhìn của các ứng dụng thường chỉ là một tập con của quan hệ
nên xem tập con của quan hệ là đơn vị phân tán sẽ là điều thích hợp duy nhất.
Phân rã quan hệ giúp giải quyết vấn đề các ứng dụng có các khung nhìn được
định nghĩa trên một quan hệ cho trước lại nằm tại những vị trí khác nhau.
Cuối cùng, việc phân rã một quan hệ thành nhiều mảnh, mỗi mảnh được xử lý
như một đơn vị, sẽ cho phép thực hiện nhiều giao dịch đồng thời. Ngoài ra việc phân
mảnh các quan hệ sẽ cho phép thực hiện song song một câu vấn tin bằng cách chia nó
thành một tập các câu vấn tin con hoạt tác trên các mảnh. Vì thế việc phân mảnh sẽ làm
tăng mức độ hoạt động đồng thời (song hành) và như thế làm tăng lưu lượng hoạt động
của hệ thống.
2. Các phương pháp phân mảnh
Phân mảnh ngang: chia một quan hệ theo các bộ. Có 2 loại phân mảnh ngang:
- Phân mảnh ngang nguyên thủy (primary horizontal fragmentation) của một
quan hệ được thực hiện dựa trên các vị từ được định nghĩa trên quan hệ.
- Phân mảnh ngang dẫn xuất (derived horizontal fragmentation) là phân rã một
quan hệ dựa vào các vị từ được định nghĩa trên một quan hệ khác.
Phân mảnh dọc: chia nhỏ một quan hệ theo các thuộc tính. 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 chứa một tập con thuộc tính

của R và cả khóa của R.
Phân mảnh hỗn hợp: là loại phân mảnh phối hợp cả phân mảnh ngang và phân
mảnh dọc.
3. Các quy tắc phân mảnh
Phương pháp phân mảnh dọc trong CSDL phân tán 4
Các quy tắc này nhằm đảm bảo tính nhất quán của cơ sở dữ liệu, đặc biệt về ngữ
nghĩa của dữ liệu.
q1. Tính đầy đủ.
Nếu một quan hệ R được phân mảnh thành các mảnh con R
1
, R
2
, , R
n
thì mỗi
mục dữ liệu phải nằm trong một hoặc nhiều các mảnh con. Ở đây trong phân ngang thì
mục dữ liệu được hiểu là các bộ còn trong phân mảnh dọc là các thuộc tính. Quy tắc
này đảm bảo không bị mất dữ liệu khi phân mảnh.
q2. Tính tái thiết được.
Nếu một quan hệ R được phân mảnh thành các mảnh con R
1
, R
2
, , R
n
thì phải
định nghĩa được một toán tử quan hệ ∇ sao cho R = R
i
.
q3. Tính tách biệt.

Giả sử một quan hệ R được phân mảnh thành các mảnh con R
1
, R
2
, , R
n
.
Đối với phân mảnh ngang mục d
i
đã nằm trong mảnh R
j
thì nó sẽ không nằm
trong mảnh R
k
với k≠j.
Đối với phân mảnh dọc thì khóa chính phải được lặp lại trong các mảnh con,
còn các thuộc tính khác phải tách rời.
II. PHƯƠNG PHÁP PHÂN MẢNH DỌC
Ý nghĩa của phân mảnh dọc là tạo ra các quan hệ nhỏ hơn để sao cho giảm tối
đa thời gian thực hiện của các ứng dụng chạy trên mảnh đó. Việc phân mảnh dọc là
hoạt động chia một quan hệ R thành các mảnh con R
1
, R
2
, , R
n
sao cho mỗi mảnh con
chứa tập con thuộc tính và chứa cả khóa của R. Với cách đặt vấn đề như vậy thì việc
phân mảnh dọc không chỉ là bài toán của hệ cơ sở dữ liệu phân tán mà còn là bài toán
của ngay cả hệ cơ sở dữ liệu tập trung.

Phân mảnh dọc là một bài toán hết sức phức tạp, người ta đã chứng minh được
rằng nếu quan hệ có m thuộc tính không phải là thuộc tính khóa thì số lượng các mảnh
dọc được phân ra là số Bell thứ m (kí hiệu B(m)), số này tăng rất nhanh với số m lớn
và đạt đến m
m
. Chẳng hạn m=10 thì B(m)≈115.000, với m=15 thì B(m)≈10
9
, với m=30
Phương pháp phân mảnh dọc trong CSDL phân tán 5
thì B(m)≈1023. Vì vậy bài toán phân mảnh dọc phải sử dụng đến các thuật giải
heuristic. Có hai phương pháp chính đã được nghiên cứu đó là phương pháp nhóm và
phương pháp tách, trong hai phương pháp thì phương pháp tách tỏ ra có sự tối ưu hơn.
Phương pháp nhóm: Khởi đầu bằng tập các mảnh, mỗi mảnh có một thuộc
tính, tại mỗi bước ghép một số mảnh lại cho đến khi thỏa mãn một tiêu chuẩn nào đó.
Phương pháp tách: Tại mỗi bước tìm một phân hoạch có lợi cho việc truy xuất
của ứng dụng trên các thuộc tính của nó.
Thông tin dùng để phân mảnh dọc có liên quan đến các ứng dụng, một mảnh
dọc thường chứa các thuộc tính thường xuyên được truy xuất chung bởi một ứng dụng,
người ta tìm cách lượng hóa khái niệm này bằng một số đo gọi là “ái lực” (affinity – ái
lực hoặc sự lôi cuốn). Số đo này có thể tính được khi ta tính được tần số truy xuất tới
các thuộc tính đó của ứng dụng. Trên cơ sở khái niệm “ái lực” và tính được độ sử dụng
thuộc tính của các câu vấn tin của ứng dụng người ta đã xây dựng được giải thuật tách
rất hữu hiệu.
Để minh họa cho phương pháp phân mảnh dọc, các ví dụ minh họa đều được
dựa trên quan hệ dự án như sau:
PROJ(PNo, PName, Budget, Loc)
Với PNo là mã dự án, PName là tên dự án, Budget là ngân sách dự án, Loc là vị
trí của dự án.
1. Giá trị sử dụng thuộc tính và tần xuất truy xuất ứng dụng
Gọi Q = {q

1
, q
2
, . . ., q
t
} là tập các câu vấn tin mà ứng dụng sẽ truy xuất trên
quan hệ R(A
1
, A
2
, . . ., A
n
). Với mỗi câu vấn tin q
i
và thuộc tính A
j
chúng ta sẽ đưa ra
một giá trị sử dụng thuộc tính, kí hiệu là use (q
i
, A
j
) được định nghĩa như sau:
1 nếu Aj được vấn tin qi sử dụng
use (qi, Aj) =
0 trong trường hợp ngược lại.
Phương pháp phân mảnh dọc trong CSDL phân tán 6
Các giá trị use (qi, *) rất dễ xác định nếu chúng ta biết được các ứng dụng chạy
trên CSDL.
Ví dụ 1: Xét quan hệ PROJ, giả sử các ứng dụng sử dụng câu vấn tin SQL truy
xuất đến nó:

q1: Tìm ngân sách của dự án theo mã số.
SELECT Budget
FROM PROJ
WHERE PNo = V
q2: Tìm tên và ngân sách của tất cả các dự án.
SELECT PName, Budget
FROM PROJ
q3: Tìm tên của dự án theo vị trí.
SELECT PName
FROM PROJ
WHERE Loc = V
q4: Tìm tổng ngân sách dự án tại mỗi vị trí.
SELECT Sum (Budget)
FROM PROJ
WHERE Loc = V
Để thuận tiện ta kí hiệu A1 = PNo, A2 = PName; A3 = Budget; A4 = Loc.
Chúng ta có ma trận sau đây:
Phương pháp phân mảnh dọc trong CSDL phân tán 7
A
1
A
2
A
3
A
4
q
1
1 0 1 0
q

2
0 1 1 0
q
3
0 1 0 1
q
4
0 0 1 1
Hình 1. Ma trận sử dụng thuộc tính (Use)
aff (A
i
, A
j
) =
Trong đó ref(q
k
) là số truy xuất đến các thuộc tính (A
i
, A
j
) cho mỗi ứng dụng
của q
k
tại vị trí S
l
và acc(q
k
) là kí hiệu số đo tần số truy xuất ứng dụng. Kết quả tính
toán được một ma trận vuông nxn và ta gọi nó là ma trận ái lực thuộc tính AA.
Ví dụ 2: Tiếp tục với ví dụ trên và để cho đơn giản chúng ta giả sử ref(q

k
) = 1
cho tất cả q
k
và S
l
. Số đo tần số truy xuất ứng dụng giả thiết như sau:
acc
1
(q1) = 15 acc
2
(q1) = 20 acc
3
(q1) = 10
acc
1
(q2) = 5 acc
2
(q2) = 0 acc
3
(q2) = 0
acc
1
(q3) = 25 acc
2
(q3) = 25 acc
3
(q3) = 25
acc
1

(q4) = 3 acc
2
(q4) = 0 acc
3
(q4) = 0
Như vậy chúng ta tính số đo ái lực giữa các thuộc tính A
1
và A
3
và bởi vì ứng
dụng duy nhất truy xuất đến cả hai thuộc tính này là q
1
nên ta có:
aff(A
1
, A
3
) = = acc
1
(q
1
) +acc
2
(q
1
) + acc
3
(q
1
) = 45

Ma trận ái lực thuộc tính đầy đủ như sau:
A
1
A
2
A
3
A
4
A
1
45 0 45 0
AA = A
2
0 80 5 75
A
3
45 5 53 3
A
4
0 75 3 78
Hình 2. Ma trận ái lực thuộc tính (AA)
Phương pháp phân mảnh dọc trong CSDL phân tán 8
2. Thuật toán BEA tìm ma trận ái lực tụ
Mục tiêu của thuật toán này là tìm một phương pháp nào đó để nhóm các thuộc
tính của một quan hệ lại dựa trên các giá trị ái lực thuộc tính trong AA. Ý tưởng chính
của thuật toán là từ một ma trận ái lực thuộc tính AA sinh ra một ma trận ái lực tụ CA
dựa trên các hoán vị hàng và cột, hoán vị được thực hiện sao cho số đo ái lực chung
AM là lớn nhất.
AM = aff(A

i
,A
j
).[aff(A
i
,A
j-1
)+aff(A
i
,A
j+1
)+aff(A
i-1
,A
j
)+aff(A
i+1
,A
j
)]
Trong đó aff(A
0
,A
j
) = aff(A
i
,A
0
) = aff(A
n+1

,A
j
) = aff(A
i
,A
n+1
) = 0 là các điều kiện
biên khi một thuộc tính được đặt vào CA vào bên trái của thuộc tính cận trái hoặc về
bên phải của thuộc tính cận phải trong các hóan vị cột, tương tự cận trên dưới đối với
hoán vị hàng. Vì ma trận ái lực AA có tính đối xứng nên công thức trên có thể thu gọn:
AM = aff(A
i
,A
j
).[aff(A
i
,A
j-1
) + aff(A
i
,A
j+1
)]
Chúng ta định nghĩa cầu nối (bond) giữa hai thuộc tính Ax và Ay là:
bond(A
x
,A
y
) =aff(A
z

,A
x
).aff(A
z
,A
y
)
Dựa vào định nghĩa đó chúng ta có thể viết lại AM như sau:
AM = [bond(A
j
,A
j-1
) + bond(A
j
,A
j+1
)]
Bây giờ chúng ta xét dãy thuộc tính như sau:
A
1
A
i
-
1
A
i
A
j
A
j+1

A
n
AM’ AM’’
Số đo ái lực chung cho các thuộc tính này là:
AM
old
= AM’+AM’’ + bond(A
i-1
,A
i
)+bond(A
i
,A
j
) + bond(A
j
,A
i
)+bond(A
j
,A
j+1
)
= AM’+AM ’’+ bond(A
i-1
,A
i
)+bond(A
j
,A

j+1
)+ 2bond(A
i
,A
j
)
Khi đặt một thuộc tính mới A
k
giữa các thuộc tính A
i
và A
j
thì số đo ái lực
chung mới là:
AM
new
= AM’+AM’’ + bond(A
i-1
,A
i
) +
bond(A
i
,A
k
) + (A
k
,A
i
) + bond(A

k
,A
j
) + bond(A
j
,A
k
) + bond(A
j
,A
j+1
)
Phương pháp phân mảnh dọc trong CSDL phân tán 9
= AM’+AM ’’ + bond(A
i-1
,A
i
) + bond(A
j
,A
j+1
) +
2bond(A
i
,A
k
) + 2bond(A
k
,A
j

)
Đóng góp thực cho số đo ái lực chung khi đặt Ak giữa Ai và Aj là:
cont(A
i
,A
k
,A
j
) = AM
new
– AM
old
= 2bond(A
i
,A
k
) + 2bond(A
k
,A
j
)
- 2bond(A
i
,A
j
)
Ví dụ 3: Với ma trận AA được tính ở trên, tính đóng góp thực khi chuyển thuộc
tính A
4
vào giữa các thuộc tính A

1
và A
2
:
cont(A
1
,A
4
,A
2
) = 2bond(A
1
,A
4
) + 2bond(A
4
,A
2
) - 2bond(A
1
,A
2
)
Ta có:
bond(A
1
,A
4
) = 45*0 + 0*75 + 45*3 + 0*78 = 135
bond(A

4
,A
2
) = 11865
bond(A
1
,A
2
) = 225
Vì vậy: cont(A
1
,A
4
,A
2
) = 2*135 + 2*11865 – 2*225 = 23550
Thuật toán năng lượng nối BEA (Bond Energy Algorithm)
Thuật toán năng lượng nối được thực hiện qua ba bước.
B1. Khởi gán. Đặt và cố định một trong các cột của AA vào trong CA. Cột 1
được chọn trong thuật toán này.
B2. Thực hiện lặp. Lấy lần lượt một trong n-i cột còn lại (i là số cột đã đặt vào
trong CA) và thử đặt chúng vào i+1 vị trí còn lại trong ma trận CA. Nơi đặt được chọn
sao cho nó đóng góp nhiều nhất cho số ái lực chung được mô tả ở trên. Việc lặp được
kết thúc khi không còn cột nào để đặt.
B3. Sắp thứ tự hàng. Một khi thứ tự cột đã được xác định, các hàng cũng cần
được đặt lại để các vị trí tương đối của chúng phù hợp với các vị trí tương đối của cột
Thuật toán BEA
Đầu vào: AA ma trận ái lực thuộc tính
Đầu ra: CA ma trận ái lực tụ.
Phương pháp phân mảnh dọc trong CSDL phân tán 10

Begin
/* Khởi gá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 AAindex */
Begin
For i :=1 To index -1 Do tính cont (A
i-1
,A
index
,A
i
);
tính cont (A
index-1
, A
index
, A
index+1
);
loc := nơi đặt được chọn bởi giá trị cont lớn nhất
For j := index DownTo loc Do CA(*,j) := AA(*,j-1);
CA(*,loc) := AA(*,index);
index := index + 1
End
Sắp thứ tự các hàng theo thứ tự tương đối của cột.
End.
Ví dụ 4. Tiếp tục với những kết quả tính toán ở những ví dụ trên, chúng ta xem
xét quá trình gom tụ các thuộc tính của quan hệ PROJ.

Khởi đầu chúng ta đặt cột 1 và 2 của AA vào ma trận CA. Tiếp theo chúng ta
xét cột 3 (thuộc tính A
3
), có ba cách đặt mô tả theo vị trí là 3-1-2, 1-3-2 hoặc 1-2-3.
Chúng ta tính đóng góp cho số đo ái lực chung của mỗi khả năng này :
Thứ tự 0-3-1:
cont(A
0
,A
3
,A
1
) = 2bond(A
0
,A
3
) + 2bond(A
3
,A
1
) - 2bond(A
0
,A
1
)
chúng ta biết rằng bond(A
0
,A
1
) = bond(A

0
,A
3
) = 0, vì vậy:
cont(A
0
,A
3
,A
1
) = 2bond(A
3
,A
1
) = 2(45*48+5*0+53+45+3*0) = 8820
Thứ tự 1-3-2 :
Phương pháp phân mảnh dọc trong CSDL phân tán 11
bond(A
1
,A
3
) = bond(A
3
,A
1
) = 4410
bond(A
3
,A
2

) = 890
bond(A
1
,A
2
) = 225
cont(A
1
,A
3
,A
2
) = 2bond(A
1
,A
3
) + 2bond(A
3
,A
2
) - 2bond(A
1
,A
2
) =
10150
Thứ tự 2-3-4 :
bond(A
1
,A

4
) = 890
bond(A
3
,A
4
) = bond(A
2
,A
4
) = 0
cont(A
2
,A
3
,A
4
) = 2bond(A
2
,A
3
) + 2bond(A
3
,A
4
) - 2bond(A
2
,A
4
) = 1780

Trong những cách tính toán trên lưu ý rằng cột A
0
và cột A
4
là các vị trí rỗng
của ma trận CA trong ngữ cảnh hiện tại, không được nhầm lẫn với thuộc tính A
4
.Ta
thấy thứ tự 1-3-2 có số đóng góp lớn nhất nên vị trí này được chọn.
A
1
A
2
A
1
A
3
A
2

A
1
45 0 A
1
45 45 0
A
2
0 80 A
2
0 5 80

A
3
45 5 A
3
45 53 5
A
4
0 75 A
4
0 3 75
(a) (b)
A
1
A
3
A
2
A
4
A
1
A
3
A
2
A
4
A
1
45 45 0 0 A

1
45 45 0 0
A
2
0 5 80 75 A
3
45 53 5 3
A
3
45 53 5 3 A
2
0 5 80 75
A
4
0 3 75 78 A
4
0 3 75 78
(c) (d)
Hình 3. Quá trình tạo ma trận ái lực tụ (CA)
Phương pháp phân mảnh dọc trong CSDL phân tán 12
Trong bảng (d) ở trên ta thấy ma trận có hai tụ, góc trên trái bao gồm các giá trị
ái lực nhỏ, góc dưới phải có các giá trị ái lực lớn, tuy nhiên trên thực tế sự tách biệt này
không hoàn toàn rõ ràng. Nếu ma trận CA lớn ta sẽ thấy có nhiều tụ hơn vì vậy sẽ dẫn
đến có nhiều phân hoạch để lựa chọn hơn.
3. Thuật toán phân hoạch thuộc tính
Xét ma trận tụ, một điểm nằm trên đường chéo sẽ xác định hai tập thuộc tính.
Giả sử điểm đó nằm ở cột i thì các tập đó là {A
1
, . . ., A
i

} và {A
i+1
, . . ., A
n
}, ta
gọi là tập đỉnh (top) TA và tập đáy (bottom) BA.
A
1
A
2
… A
i
A
i+1
… A
n
A
1
A
2
TA

A
i
A
i+1
… BA
A
n
Hình 4. Xác định điểm tách trong phân hoạch

Xét tập ứng dụng Q = {q
1
, q
2
, . . ., q
t
}, ta định nghĩa các tập ứng dụng chỉ truy
xuất TA, chỉ truy xuất BA hoặc cả hai. AQ(q
i
) tập thuộc tính được truy xuất bởi ứng
dụng q
i
, TQ và BQ là tập ứng dụng chỉ truy xuất TA và BA, OQ là tập ứng dụng truy
xuất cả hai.
AQ(q
i
) = {A
j
| use (q
i
,A
j
) = 1} TQ = {q
i
| AQ(q
i
) ⊆ TA}
BQ = {q
i
| AQ(q

i
) ⊆ BA} OQ = Q – {TQ ∪ BQ}
Giả sử có n thuộc tính thì chúng ta có n-1 vị trí có thể chọn cho điểm phân chia.
Vị trí tốt nhất để chọn sao cho tống các truy xuất chỉ một mảnh là lớn nhất còn
tổng truy xuất cả hai mảnh là nhỏ nhất. Chúng ta định nghĩa phương trình chi phí như
sau:
CQ = ref(q
i
)acc
j
(q
i
)
CTQ = ref(q
i
)acc
j
(q
i
)
Phương pháp phân mảnh dọc trong CSDL phân tán 13
CBQ = ref(q
i
)acc
j
(q
i
)
COQ = ref(q
i

)acc
j
(q
i
)
Phương trình tối ưu hóa xác định điểm x (1≤x≤n) sao cho:
z = CTQ * CBQ – COQ
2
→ max
Để chọn được x theo phương trình tối ưu hóa chúng ta phải xét tất cả n-1 trường
hợp. Để cho đơn giản chúng ta chỉ xét trường hợp điểm z là duy nhất và tụ nằm ở góc
trên trái và góc dưới phải của ma trận CA. Điểm z chia quan hệ R thành hai mảnh R
1
và R
2
sao cho R
1
∩R
2
= K (tập thuộc tính khóa chính).
Thuật toán PARTITION
Đầu vào: 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 xuất, K tập thuộc tính khóa chính của R
Đầu ra: F tập các mảnh dọc.
Begin
z là vị trí thuộc cột thứ nhất;
tính CTQ
1
;
tính CBQ

1
;
tính COQ
1
;
best := CTQ
1
* CBQ
1
– COQ
1
2
For i := 2 To n-1 Do
Begin
tính CTQ
i
;
tính CBQ
i
;
tính COQ
i
;
z := CTQ
i
* CBQ
i
– COQ
i
2

;
If z > best Then best := z
End;
Phương pháp phân mảnh dọc trong CSDL phân tán 14
R1 := ∏TA(R) ∪ K;
R2 := ∏BA(R) ∪ K;
F := R
1
∪R
2
;
End.
Ví dụ 5 : Tiếp tục với các tính toán ở trên và với những dữ liệu đã có.
Ở vị trí 1: TA = {A
1
}, TQ = {}, BQ = {q
2
, q
3
, q
4
}, OQ = {q
1
}
CTQ
1
= 0
CBQ
1
= acc

1
(q
2
) + acc
2
(q
2
) + acc
3
(q
2
) + acc
1
(q
3
) + acc
2
(q
3
) + acc
3
(q
3
)
+ acc
1
(q
4
) + acc
2

(q
4
) + acc
3
(q
4
) = 83
COQ
1
= 45
z = - 2025
Ở vị trí 2: TA = {A
1
, A
3
}, TQ = {q
1
}, BQ = {q
3
}, OQ = {q
2
, q
4
}
CTQ2 = 45
CBQ2 = 75
COQ2 = 8
z = 3311
Ở vị trí 3 : TA = {A
1

, A
3
, A
2
}, TQ = {q
1
, q
2
}, BQ = {}, OQ = {q
3
, q
4
}
CTQ3 = 50
CBQ3 = 0
COQ3 = 78
z = - 6084
Ta chọn vị trí 2 làm điểm phân chia vì tại vị trí này giá trị trọng tâm là lớn nhất.
Như vậy chúng ta có PROJ
1
= {A
1
, A
3
} và PROJ
2
= {A
1
, A
2

, A
4
}. Tức là PROJ
1
=
{PNo, Budget} và PROJ
2
= {PNo, PName, Loc}.
III. CHƯƠNG TRÌNH DEMO
Phương pháp phân mảnh dọc trong CSDL phân tán 15
Chương trình demo sẽ cài đặt các thuật toán đã đề cập ở trên để thực hiện phân
mảnh một quan hệ thành 2 mảnh.
Hình 5. Màn hình chương trình demo phân mảnh dọc
1: Các TextBox dùng để nhập số thuộc tính của quan hệ được phân mảnh, số
site, số truy vấn.
2: Nút Tạo ma trận để tạo các ma trận Use, Access, AA, CA rỗng.
3: Các TextBox dùng để nhập 2 cột cố định khi tìm ma trận CA.
4: DatagridView dùng để nhập khóa của quan hệ.
5: Nút Phân mảnh để ra lệnh thực hiện việc phân mảnh.
6: DatagridView dùng để nhập ma trận Use.
1
2
3
5
4
10
6
7 8 9 11
Phương pháp phân mảnh dọc trong CSDL phân tán 16
7: DatagridView dùng để nhập ma trận Access.

8: DatagridView dùng để hiển thị ma trận AA.
9: DatagridView dùng để hiển thị ma trận CA.
10: Các TextBox hiển thị 2 mảnh kết quả.
11: RichTextBox hiển thị lời giải tạo ma trận CA và phân mảnh.
Để chạy chương trình, người sử dụng làm theo các bước sau:
- B1: Nhập số thuộc tính của quan hệ được phân mảnh, số site, số truy vấn (lưu
ý các số này phải nằm trong khoảng từ 3-7) rồi nhấp nút Tạo ma trận để tạo các ma
trận Use, Access, AA, CA rỗng cho quá trình chạy thuật toán.
- B2: Nhập 2 cột cố định khi tìm ma trận CA. Nhập khóa của ma trận (khóa có
thể nhập hoặc để trống) bằng cách nhập 1 số khác 0 vào các ô thuộc tính có mặt trong
khóa. Nhập ma trận Use và ma trận Access. Các vị trí có giá trị bằng 0 có thể bỏ qua
không cần nhập, chương trình tự động hiểu các vị trí bỏ trống có giá trị bằng 0.
- B3: Nhấp nút Phân mảnh, chương trình sẽ chạy thuật toán và xuất kết quả ma
trận AA, CA, các mảnh, hiển thị lời giải tạo ma trận CA và phân mảnh.
Phương pháp phân mảnh dọc trong CSDL phân tán 17
KẾT LUẬN
Bài tiểu luận đã trình bày về phương pháp phân mảnh dọc trong cơ sở dữ liệu
phân tán kèm theo chương trình demo các thuật toán trong quá trình phân mảnh dọc
giúp hiểu các thuật toán một cách dễ dàng.
Tuy nhiên, bài tiểu luận mới chỉ dừng lại ở việc tổng hợp các kiến thức đã có mà
chưa thể có những đóng góp, cải tiến gì thêm cho việc phân mảnh dọc.
Phương pháp phân mảnh dọc trong CSDL phân tán 18
TÀI LIỆU THAM KHẢO
[1] PGS. TS Đỗ Phúc, Bài giảng thiết kế CSDL phân tán, Trường Đại học công
nghệ thông tin, Đại học quốc gia TP. Hồ Chí Minh, 2012.
[2]. M. Tamer Ozsu, Patrick Valduriez, Biên dịch Trần Đức Quang, Nguyên
lý các hệ cơ sở dữ liệu phân tán, NXB Thống Kê, 1999.
[3]. M. Tamer Ozsu, Patrick Valduriez, S. Sridhar, Principles Of Distributed
Database Systems, 2nd Ed, Pearson, 2006.

×