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

Tiểu luận môn cơ sở dữ liệu nâng cao THIẾT KẾ CƠ SỞ DỮ LIỆU 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 (593.96 KB, 22 trang )

MỤC LỤC
MỞ ĐẦU
Cơ sở dữ liệu (CSDL) là một trong những lĩnh vực được quan tâm nhiều trong công
nghệ thông tin. Ra đời từ những năm 60 đến nay, đã xuất hiện nhiều thế hệ quản trị
CSDL, và cũng đã có nhiều ứng dụng trong khoa học kỹ thuật cũng như trong các ngành
kinh tế khác. Trong đó phải nói đến cơ sở dữ liệu phân tán. Nó đã trở thành một lĩnh vực xử

thông tin quan trọng và chúng ta dễ dàng nhận ra tầm quan trọng của nó ngày
càng
lớn
mạnh. Chúng ta có lý do về tổ chức cũng như về kỹ thuật để phát triển theo
xu
hướng này: cơ
sở dữ liệu phân tán khắc phục được một số hạn chế của cơ sở dữ
liệu
tập trung như quá tải
server, nghẽn cổ chai khi truy xuất, tính sẵn sang/ độ tin
cậy
về khả năng chịu lỗi thấp. Hơn
nữa cơ sở dữ liệu phân tán phù hợp hơn với các
tổ
chức dữ liệu phi tập trung cũng như với các
ứng dụng phân
tán.
Khi nói đến CSDL phân tán người ta luôn hiểu một cách đơn giản
nó là một tập hợp dữ
liệu (cơ sở dữ
liệu)
của một hệ thống thông tin nhưng được phân bố trên nhiều địa điểm (site)
của
một


mạng máy tính (intranet) và công việc này là phần quan trọng khi triển khai một hệ
thống CSDL phân tán và trong phạm vi bài thu hoạch này chúng ta sẽ tìm hiểu cặn kẽ vấn đề
này đặc biệt thông qua chương trình ứng dụng có sử dụng phương pháp phân mảnh dọc và các
thuật toán để làm cho vấn đề của chúng ta trực quan hơn.
I. TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU PHÂN TÁN.
1. Định nghĩa.
Một CSDL phân tán là một tập hợp nhiều CSDL có liên đới logic và được phân bố
trên một mạng máy tính
Tính chất phân tán: Toàn bộ dữ liệu của CSDL phân tán không được cư trú ở một
nơi mà cư trú ra trên nhiều trạm thuộc mạng máy tính, điều này giúp chúng ta phân biệt
CSDL phân tán với CSDL tập trung đơn lẻ.
Tương quan logic: Toàn bộ dữ liệu của CSDL phân tán có một số các thuộc tính
ràng buộc chúng với nhau, điều này giúp chúng ta có thể phân biệt một CSDL phân tán
với một tập hợp CSDL cục bộ hoặc các tệp cư trú tại các vị trí khác nhau trong một mạng
máy tính.
Hình 1. Môi trường hệ cơ sở dữ liệu
Trong hệ thống cơ sở dữ liệu phân tán gồm nhiều trạm, mỗi trạm có thể
khai thác các giao tác truy nhập dữ liệu trên nhiều trạm khác.
Ví dụ 1 .1 : Với một ngân hàng có 3 chi nhánh đặt ở các vị trí khác nhau.
Tại mỗi chi nhánh có một máy tính điều khiển một số máy kế toán cuối cùng (Teller
terminal). Mỗi máy tính với cơ sở dữ liệu thống kê địa phương của nó tại mỗi chi nhánh
được đặt ở một vị trí của cơ sở dữ liệu phân tán. Các máy tính được nối với nhau bởi một
mạng truyền thông.
2.
Các điểm đặc trưng của cơ sở dữ liệu phân tán so với cơ sở dữ liệu
tập trung
Cơ sở dữ liệu phân tán không đơn giản là việc phân tán các cơ sở dữ liệu tập
trung
bởi vì nó cho phép thiết kế các hệ thống có các tính chất khác với hệ thống tập
trung

truyền
thống. Vì thế nên xem lại các tính chất đặc trưng của cơ sở dữ liệu tập
trung
truyền thống và
so sánh nó với các tính chất của cơ sở dữ liệu phân tán. Các
tính
chất đặc trưng của cơ sở
dữ liệu tập trung là điều khiển tập trung, độc lập dữ
liệu,
chuẩn hóa để loại bỏ sự dư thừa dữ
liệu, các cấu trúc lưu trữ vật lý phức tạp đáp
ứng
cho việc truy xuất hiệu quả, toàn vẹn, phục
hồi, điều khiển đồng thời và an
toàn.
Dưới đây là bảng so sánh các tính chất đặc trưng của cơ sở dữ liệu tập trung và

sở dữ liệu phân
tán
Tính chất đặc
trưng
Cơ sở dữ liệu tập
trung
Cơ sở dữ liệu phân
tán
Điều khiển tập
trung
- Khả năng cung cấp sự
điều
khiển tập trung trên các

tài
nguyên thông
tin.
- Cần có người quản trị

sở dữ
liệu.
- Cấu trúc điều khiển
phân
cấp: quản trị cơ sở dữ
liệu
toàn cục và quản trị cơ
sở
dữ
liệu cục bộ phân
tán.
Độc lập dữ
liệu
- Tổ chức dữ liệu trong
suốt
với các lập trình viên.
Các
chương trình được viết

cái nhìn “quan niệm” về
dữ
liệu.
- Lợi điểm: các chương
trình
không bị ảnh hưởng bởi

sự
thay đổi tổ chức vật lý
của
dữ
liệu
- Ngoài tính chất độc dữ
liệu
như trong cơ sở dữ liệu
tập
trung, còn có tính chất
trong
suốt phân tán nghĩa là
các
chương trình được viết
như

sở dữ liệu không hề
được
phân tán.
Sự dư thừa dữ
liệu
Giảm thiểu sự dư thừa
dữ
liệu
do:
- Tính nhất quán dữ
liệu.
- Tiết kiệm dung lượng
nhớ.
- Giảm thiểu sự dư thừa

dữ
liệu đảm bảo tính nhất
quán.
- Nhưng lại nhân bản dữ
liệu
đến các địa điểm mà các
ứng
dụng cần đến, giúp cho
việc
thực thi các ứng dụng
không
dừng nếu có một địa
điểm
bị
hỏng. Từ đó vấn
đề quản

nhất quán dữ
liệu sẽ phức
tạp hơn.
Các cấu trúc vật lý
phức
tạp
và truy xuất hiệu
quả
Các cấu trúc vật lý phức
tạp
giúp cho việc truy xuất
dữ
liệu được hiệu

quả.
Các cấu trúc vật lý phức
tạp
giúp liên lạc dữ liệu trong

sở dữ liệu phân tán
.
Tính toàn vẹn, phục
hồi,
đồng
thời
Dựa vào giao
tác.
Dựa vào giao tác phân
tán.
3. Kiến trúc cơ bản của một cơ sở dữ liệu phân tán
Đây không là kiến trúc tường minh cho tất cả các CSDL phân tán, tuy vậy kiến trúc
này thể hiện tổ chức của bất kỳ một CSDL phân tán nào.
Sơ đồ tổng thể: Định nghĩa tất cả các dữ liệu sẽ được lưu trữ trong CSDL phân
tán. Trong mô hình quan hệ, sơ đồ tổng thể bao gồm định nghĩa của c ác tập quan hệ
tổng thể .
Sơ đồ phân đoạn: Mỗi quan hệ tổng thể có thể chia thành một vài phần không gối
lên nhau được gọi là đoạn (fragments). Có nhiều cách khác nhau để thực hiện việc phân
chia này. ánh xạ (một - nhiều) giữa sơ đồ tổng thể và các đoạn được định nghĩa trong sơ
đồ phân đoạn.
Sơ đồ định vị: Các đoạn là các phần logic của quan hệ tổng thể được định vị vật lý
trên một hoặc nhiều vị trí trên mạng. Sơ đồ định vị định nghĩa đoạn nào định vị tại các vị
trí nào. Lưu ý rằng kiểu ánh xạ được định nghĩa trong sơ đồ định vị quyết định CSDL
phân tán là dư thừa hay không.
Sơ đồ ánh xạ địa phương: ánh xạ các ảnh vật lý và các đối tượng được lưu trữ

tại một trạm (tất cả các đoạn của một quan hệ tổng thể trên cùng một vị trí tạo ra một
ảnh vật lý)
Hình 1.2 Kiến trúc cơ bản của CSDL phân tán
4. Hệ quản trị CSDL phân tán
Hệ quản trị CSDL phân tán (Distributed Database Management System- DBMS)
được định nghĩa là một hệ thống phần mềm cho phép quản lý các hệ CSDL (tạo lập và
điều khiển các truy nhập cho các hệ CSDL phân tán) và làm cho việc phân tán trở nên
trong suốt với người sử dụng.
Đặc tính vô hình muốn nói đến sự tách biệt về ngữ nghĩa ở cấp độ cao của một hệ
thống với các vấn đề cài đặt ở cấp độ thấp. Sự phân tán dữ liệu được che dấu với người
sử dụng làm cho người sử dụng truy nhập vào CSDL phân tán như hệ CSDL tập
trung. Sự thay đổi việc quản trị không ảnh hưởng tới người sử dụng.
Hệ quản trị CSDL phân tán gồm 1 tập các phần mềm (chương trình) sau:
 Các chương trình quản trị các dữ liệu phân tán
 Chứa các chương trình để quản trị việc truyền thông dữ liệu
 Các chương trình để quản trị các CSDL địa phương.
 Các chương trình quản trị từ điển dữ liệu.
Để tạo ra một hệ CSDL phân tán (Distributed Database System-DDBS) các tập tin
không chỉ có liên đới logic chúng còn phải có cấu trúc và được truy xuất qua một giao
diện chung.
Môi trường hệ CSDL phân tán là môi trường trong đó dữ liệu được phân tán trên
một số vị trí.
5. Mục đích của việc sử dụng cơ sở dữ liệu phân tán
Xuất phát từ yêu cầu thực tế về tổ chức và kinh tế: Trong thực tế nhiều tổ chức là
không tập trung, dữ liệu ngày càng lớn và phục vụ cho đa người dùng nằm phân tán, vì
vậy cơ sở dữ liệu phân tán là con đường thích hợp với cấu trúc tự nhiên của các tổ chức
đó. Đây là một trong những yếu tố quan trọng thức đẩy việc phát triển cơ sở dữ liệu phân
tán.
Sự liên kết các cơ sở dữ liệu địa phương đang tồn tại: cơ sở dữ liệu phân tán là
giải pháp tự nhiên khi có các cơ sở dữ liệu đang tồn tại và sự cần thiết xây dựng một ứng

dụng toàn cục. Trong trường hợp này cơ sở dữ liệu phân tán được tạo từ dưới lên dựa
trên nền tảng cơ sở dữ liệu đang tồn tại. Tiến trình này đòi hỏi cấu trúc lại các cơ sở
dữ liệu cục bộ ở một mức nhất định. Dù sao, những sửa đổi này vẫn là nhỏ hơn rất
nhiều so với việc tạo lập một cơ sở dữ liệu tập trung hoàn toàn mới.
Làm giảm tổng chi phí tìm kiếm: Việc phân tán dữ liệu cho phép các nhóm làm
việc cục bộ có thể kiểm soát được toàn bộ dữ liệu của họ. Tuy vậy, tại cùng thời điểm
người sử dụng có thể truy cập đến dữ liệu ở xa nếu cần thiết. Tại các vị trí cục bộ, thiết
bị phần cứng có thể chọn sao cho phù hợp với công việc xử lý dữ liệu cục bộ tại điểm đó.
Sự phát triển mở rộng: Các tổ chức có thể phát triển mở rộng bằng cách thêm các
đơn vị mới, vừa có tính tự trị, vừa có quan hệ tương đối với các đơn vị tổ chức khác.
Khi đó giải pháp cơ sở dữ liệu phân tán hỗ trợ một sự mở rộng uyển chuyển với một
mức độ ảnh hưởng tối thiểu tới các đơn vị đang tồn tại Trả lời truy vấn nhanh: Hầu hết
các yêu cầu truy vấn dữ liệu từ người sử dụng tại bất kỳ vị trí cục bộ nào đều thoả mãn
dữ liệu ngay tại thời điểm đó. Độ tin cậy và khả năng sử dụng nâng cao: nếu có một
thành phần nào đó của hệ thống bị hỏng, hệ thống vẫn có thể duy trì hoạt động.
Khả năng phục hồi nhanh chóng: Việc truy nhập dữ liệu không phụ thuộc vào một
máy hay một đường nối trên mạng. Nếu có bất kỳ một lỗi nào hệ thống có thể tự động
chọn đường lại qua các đường nối khác.
II. THIẾT KẾ CƠ SỞ DỮ LIỆU PHÂN TÁN.
1 Lý do phân mảnh.
Khung nhìn của các ứng dụng thường chỉ là một tập con của quan hệ. Vì thế đơn
vị truy xuất không phải là toàn bộ quan hệ nhưng chỉ là các tập con của quan hệ. Kết quả
là 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.
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ó ra 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 và như thế làm tăng lưu lượng hoạt động của hệ thống.
2 Các quy tắc phân mảnh đúng đắn
Chúng ta sẽ tuân thủ ba quy tắc trong khi phân mảnh mà chúng bảo đảm rằng

CSDL sẽ không có thay đổi nào về ngữ nghĩa khi phân mảnh.
a) Tính đầy đủ (completeness).
Nếu một thể hiện quan hệ R được phân rã thành các mảnh R
1
, R
2
,…,R
n
, thì mỗi
mục dữ liệu có thể gặp trong R cũng có thể gặp một trong nhiều mảnh Ri. Đặc tính này
giống như tính chất phân rã nối không mất thông tin trong chuẩn hoá, cũng quan trọng
trong phân mảnh bởi vì nó bảo đảm rằng dữ liệu trong quan hệ R được ánh xạ vào
các mảnh và không bị mất. Chú ý rằng trong trường hợp phân mảnh ngang "mục dữ liệu"
muốn nói đến là một bộ, còn trong trường hợp phân mảnh dọc, nó muốn nói đến một
thuộc tính.
Nếu một thể hiện quan hệ R được phân rã thành các mảnh R
1
, R
2
,…,R
n
, thì cần
phải định nghĩa một toán tử quan hệ
sao cho
R=
R
i
, R
i
∈ F

r
Toán tử thay dổi tuỳ theo từng loại phân mảnh, tuy nhiên diều quan trọng là phải
xác dịnh duợc nó. Khả nang tái thiết một quan hệ từ các mảnh của nó bảo dảm rằng các
ràng buộc duợc dịnh nghia trên dữ liệu duới dạng các phụ thuộc sẽ duợc bảo toàn.
c) Tính tách biệt (disjointness).
Nếu quan hệ R được phân rã ngang thành các mảnh R
1
, R
2
,…,R
n
, và mục dữ liệu
d
i
nằm trong mảnh R
j
, thì nó sẽ không nằm trong mảnh R
k
khác (
k


j ). Tiêu chuẩn này
đảm bảo các mảnh ngang sẽ tách biệt (rời nhau). Nếu quan hệ
được phân rã dọc, các thuộc tính khoá chính phải được lặp lại trong mỗi mảnh. Vì
thế trong trường hợp phân mảnh dọc, tính tách biệt chỉ được định nghĩa trên các trường
không phải là khoá chính của một quan hệ.
3. Phân mảnh dọc
Một phân mảnh dọc của quan hệ R là tập các mảnh R
1

, , R
k
, trong đó mỗi mảnh
chứa tập con thuộc tính của R và cá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 tập các quan hệ nhỏ hơn để nhiều ứng dụng chỉ cần chạy trên 1
mảnh. Phân mảnh tối ưu 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 đó.
Phân mảnh dọc phức tạp hơn so với phân mảnh ngang. Điều này do số khả năng
phân mảnh dọc rất lớn. Trong phân mảnh ngang, nếu tổng số vị từ đơn giản trong Pr là n
thì có 2
n
vị từ hội sơ cấp có thể định nghĩa trên nó. Ngoài ra có thể loại bỏ một số lớn
trong đó mâu thuẫn với phép kéo theo hiện có, như vậy sẽ làm giảm di số mảnh dự tuyển.
Trong trường hợp phân mảnh dọc, nếu quan hệ có m thuộc tính không khoá, thì số mảnh
có thể bằng B(m), số Bell thứ m. Với m lớn B(m) ≈ m
m
, chẳng hạn với B(10)≈115000,
B(15)≈10
9
, B(30)≈10
23
.
Những giá trị này cho thấy, nỗ lực tìm lời giải tối ưu cho bài toán phân hoạch doc
không hiệu quả; vì thế phải dùng đến các phương pháp heuristic. Chúng ta nêu ở đây hai
loại heuristic 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 số mảnh lại cho dến khi thoả tiêu chuẩn nào đó.
(2) 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.
Trong phần tiếp chúng ta chỉ thảo luận kỹ thuật tách mảnh, vì nó thích hợp phương

pháp thiết kế từ trên xuống hơn và giải pháp tối ưu gần với quan hệ đầy đủ hơn là tập các
mảnh chỉ có 1 thuộc tính. Hơn nữa kỹ thuật tách mảnh sinh ra các mảnh với các thuộc
tính không khoá không chồng nhau.
Việc nhân bản khoá chính cho các mảnh là đặc trưng của phân mảnh dọc, cho phép
tái thiết quan hệ toàn cục. Vì thế phương pháp tách mảnh chỉ đề cập đến các thuộc tính
không khoá.
Mặc dù có những vấn đề phát sinh, nhân bản các thuộc tính khoá có ưu điểm nổi bật
là duy trì tính toàn vẹn ngữ nghĩa sẽ được thảo luận sau.
Một chọn lựa khác đối với nhân bản các thuộc tính khoá là sử dụng một mã định bộ
(TID - tuple identifier). Đây là giá trị duy nhất được hệ thống gán cho mối bộ của quan
hệ.
a) Các 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 tới các ứng dụng. 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,
ta cần xác định một độ đo khái niệm “chung với nhau”. Số đo này gọi là ái lực (affinity)
của thuộc tính, chỉ mức độ liên đới giữa các thuộc tính.
Yêu cầu dữ liệu chính có 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
k
} là tập các vấn tin của người dùng sẽ chạy trên
quan hệ R(A
1
, , A
n
). Với mỗi câu vấn tin q
i
và mỗi thuộc tính A
j

ta định nghĩa giá trị
sử dụng (attribute usage value), ký hiệu use(q
i
, A
j
), như sau



=
ji
ji
i
Achieuthamkhongq
Achieuthamq
Aquse
0
1
),(
¹
Các vectơ use(q
i
,•) cho mỗi ứng dụng sẽ được xác định nếu nhà thiết kế biết được
các ứng dụng chạy trên CSDL. Cần nhắc lại rằng qui tắc 80/20 rất có ích cho công việc
này.
◊ Ví dụ
Xét quan hệ PROJ của ví dụ phần trước. Giả sử các ứng dụng sau đây chạy trên
quan hệ đó.
q
1

: Tìm ngân sách của dự án, cho biết mã số dự án.
SELECT BUDGET
FROM PROJ
WHERE PNO = Value
q
2
: Tìm tên và ngân sách của tất cả dự án.
SELECT PNAME, BUDGET
FROM PROJ
q
3
: Tìm tên của các dự án được thực hiện ở thành phố đã cho
SELECT PNAME
FROM PROJ
WHERE LOC = Value
q
4
: Tìm tổng ngân sách các dự án được thực hiện ở thành phố đã cho
SELECT SUM(BUDGET)
FROM PROJ
WHERE LOC = Value
Dựa theo 4 ứng dụng này ta có thể xác định được giá trị sử dụng các thuộc tính. Để
cho đơn giản ta ký hiệu
A
1
=PNO, A
2
=PNAME, A
3
=BUDGET và A

4
=LOC.
Giá trị sử dụng cho ở bảng sau:
1100
1010
0110
0101
4
3
2
1
4321
q
q
q
q
AAAA
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ị độ lớn của tần số ứng dụng. Số đo tần số có
thể được chứa trong định nghĩa về số đo ái lực thuộc tính aff(A
i
, A
j
), biểu thị cho cầu nối
(bond) giữa hai thuộc tính của 1 quan hệ theo cách chúng được các ứng dụng truy xuất.
Cho quan hệ R(A
1
, , A
n
) và tập ứng dụng Q={q

1
, , q
k
}. Với mỗi cặp thuộc tính
(A
i
,A
j
) Ký hiệu
S
l
là vị trí thứ l, l=1, ,L
ref
l
(q
k
) là số lần truy xuất đến A
i
, A
j
cho mỗi lần thực hiện ứng dụng q
k
tại vị trí S
l
.
acc
l
(q
k
) là số đo tần số thực hiện ứng dụng q

k
tại vị trí S
l
.
Q(i,j) = {k  use(q
k
, A
i
) = 1 & use(q
k
, A
i
) = 1}
Số đo ái lực thuộc tính giữa hai thuộc tính A
i
và A
j
của quan hệ R(A
1
, , A
n
) ứng
với tập ứng dụng Q={q
1
, , q
k
} là
∑ ∑
∈ ∀
=

),(
¹
)().(),(
jiQk
klk
S
li
qaccqrefAAaff
l
Kết quả là ma trận vuông cấp n gọi là ma trận ái lực thuộc tính (AA - attribute
affinity matrix).
◊Ví dụ
Ta tiếp tục ví dụ trên. Để đơn giản ta giả sử rằng có 3 vị trí và 4 ứng dụng và
ref
l
(q
k
)=1 với mọi S
l
và mọi q
k
. Cho tần số sử dụng như sau
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;
Vì chỉ có ứng dụng q
1
truy xuất đến cả hai thuộc tính A
1
và A
3
, nên ta có
aff(A
1
, A
3
) = acc
1
(q
1
) + acc

2
(q
1
) + acc
3
(q
1
) = 45
Tương tự ta tính được ma trận ái lực sau
AA =
783750
353545
755800
045045
4
3
2
1
4321
A
A
A
A
AAAA
b) Thuật toán tụ nhóm
Nhiệm vụ cơ bản trong việc xây dựng thuật toán phân mảnh dọc là tìm phương tiện
nào đó để nhóm các thuộc tính của quan hệ dựa trên ma trận ái lực.Thuật toán năng
lượng nối BEA (bond energy algorithm) là thích hợp vì những lý do sau:
(1) BEA gom các thuộc tính có cùng độ lớn ái lực lại với nhau.
(2) Các kết quả tụ nhóm không bị ảnh hưởng bởi thứ tự đưa các mục vào thuật toán.

(3) Thời gian tính toán là O(n
2
) với n là số thuộc tính.
(4) Có thể xác định mối liên hệ giữa các nhóm thuộc tính.
Thuật toán năng lượng nối BEA hoán vị các hàng và cột ma trận ái lực để tạo thành
ma trận ái lực tụ (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:
)],(),(),(),()[,(
1
1 1
111 ji
n
i
n
j
jijijiji
AAaffAAaffAAaffAAaffAAaffAM
+
= =
−+−
+++=
∑∑
trong đó
aff(A
0
, A
j
) = aff(A
i
, A

0
) = aff(A
n+1
, A
j
) = aff(A
i
, A
n+1
) = 0 ∀i,j
Vì ma trận ái lực đối xứng nên hàm số AM có thể viết là
]),(),()[,(
1 1
11
∑∑
= =
+−
+=
n
i
n
j
jijiji
AAaffAAaffAAaffAM
Quá trình sinh ma trận ái lực tụ (CA) được thực hiện qua 3 bước
(1) Khởi tạo. Đặt cố định một trong các cột của AA vào CA, chẳng hạn cột 1. Gán
số cột trong CA i:=1.
(2) Thực hiện lặp. Lấy lần lượt một trong n-i cột còn lại trong AA đặt vào i+1 vị
trí giữa i cột trong CA. Chọn nơi đặt sao cho nó làm tăng nhiều nhất số đo ái lực được mô
tả ở trên. Tăng i:=i+1.

Tiếp tục bước này cho đến khi i=n.
(3) Sắp thứ tự hàng. Một khi thứ tự các cột đã được xác định, các hàng cũng sắp thứ
tự lại tương ứng.
Để bước (2) 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ó
]),(),()[,(
1 1
11
∑∑
= =
+−
+=
n
i
n
j
jijiji
AAaffAAaffAAaffAM
∑∑
= =
+−
+=
n
i
n
j
jijijiji
AAaffAAaffAAaffAAaff
1 1

11
),(),(),(),(
Ta định nghĩa cầu nối (bond) giữa hai thuộc tính A
x
và A
y
như sau

=
=
n
z
yzxzyx
AAaffAAaffAAbond
1
),(),(),(
Như vậy AM có thể viết lại là

=
+−
+=
n
j
jjjj
AAbondAAbondAM
1
11
),(),(
Bây giờ xét n thuộc tính sau
  

  
"
1
'
121
, ,, ,,
AM
njji
AM
i
AAAAAAA
+−
Số đo ái lực chung cho các thuộc tính này có thể viết là
),(),(),(),("'
11 +−
+++++=
jjijjiiiold
AAbondAAbondAAbondAAbondAMAMAM
),(2)],(),([)],(),([
1
11
1
1
11 ji
n
jl
lili
i
l
lili

AAbondAAbondAAbondAAbondAAbond ++++=
∑∑
+=
+−

=
+−
Bây giờ xét đến việc đặt thuộc tính mới A
k
vào giữa thuộc tính A
i
và A
j
trong
ma trận ái lực tụ. Số đo ái lực chung mới có thể biểu diễn tương tự như sau:
),(2),(2"'
),(),(),(),("'
jkki
kjjkikkinew
AAbondAAbondAMAM
AAbondAAbondAAbondAAbondAMAMAM
+++=
+++++=
Vì thế đóng góp thực (net contribution) cho số đo ái lực chung khi đặt thuộc tính
A
k
vào giữa thuộc tính A
i
và A
j


),(2),(2),(2),,(
jijkkioldnewjki
AAbondAAbondAAbondAMAMAAAcont
−+=−=
Sau đây là thuật toán năng lượng nối BEA
Thuật toán BEA
Đầu vào: Ma trận ái lực AA cấp n
Đầu ra: Ma trận ái lực tụ CA
{loc là biến lưu vị trí nơi có giá trị cont lớn nhất}
Begin
{khởi tạo}
CA(•,1):=AA(•,1);
CA(•,2):=AA(•,2);
index:=3;
while index

n do
begin
for i:=1 to index-1 do
begin
tính cont(A
i-1
, A
index
, A
i
)
end {for}
tính cont(A

index-1
, A
index
, A
index+1
)
loc:= nơi có giá trị cont lớn nhất.
for i:=index downto loc do
CA(•,j) := CA(•,j-1)
CA(•,loc) := AA(•, index)
index := index + 1
end;
{sắp thứ tự các hàng theo thứ tự các cột}
end (BEA)
◊ Ví dụ
Xét ma trận AA tính ở ví dụ trước
AA =
783750
353545
755800
045045
4
3
2
1
4321
A
A
A
A

AAAA
Ta tính phần đóng góp khi di chuyển A
4
vào giữa các thuộc tính A
1
và A
2
được
cho bằng công thức
23550225*211865*2135*2
),(2),(2),(2),,(
212441241
=−+=
−+= AAbondAAbondAAbondAAAcont

22575*05*4580*00*45),(
1186575*785*380*750*0),(
13578*03*4575*00*45),(
21
24
41
=+++=
=+++=
=+++=
AAbond
AAbond
AAbond
Trường hợp thuộc tính A
k
đặt vào tận cùng bên trái hoặc tận cùng bên phải ta có

bond(A
0
,A
k
) = bond(A
k
,A
k+1
) = 0
◊Ví dụ
Ta xét tiếp ví dụ trên. Bây giờ ta gom tụ các thuộc tính của quan hệ PROJ và dùng
ma trận ái lực AA.
Theo bước khởi đầu ta đưa cột 1 và cột 2 của AA vào CA
783
353
755
045
4
3
2
1
4321
A
A
A
A
AAAA
→
750
545

800
045
4
3
2
1
21
A
A
A
A
AA
Tiếp theo ta di chuyển cột 3 của AA sang CA. Có 3 nơi có thể đặt cột 3:
- Bên trái cột 1: ta có
bond(A
0
,A
1
) = bond(A
0
,A
3
) = 0
bond(A
3
,A
1
) = 45*48+5*0+53*45+3*0 = 4410
suy ra
cont(A

0
,A
3
,A
1
) = 2 bond(A
0
,A
3
) + 2bond(A
3
,A
1
) - 2 bond(A
0
,A
1
) = 8820
- Giữa cột 1 và 2: ta có
bond(A
1
,A
3
) = bond(A
3
,A
1
) = 4410
bond(A
3

,A
2
) = 890
bond(A
1
,A
2
) = 225
suy ra
cont(A
1
,A
3
,A
2
) = 10150
- Bên phải cột 2: ta có
bond(A
3
,A
4
) = bond(A
2
,A
4
) = 0
bond(A
1
,A
4

) = 890
suy ra
cont(A
2
,A
3
,A
4
) = 1780
Vì đóng góp của trường hợp thứ 2 là lớn nhất, ta chèn A
3
vào giữa A
1
và A
2
, và có
78
3
75
0
4
3
2
1
4321
A
A
A
A
AAAA

→
7530
55345
8050
04545
4
3
2
1
231
A
A
A
A
AAA
Tính toán tương tự cho A
4
chỉ ra rằng cần đặt nó bên phải A
2
.
787530
355345
758050
004545
4
3
2
1
4231
A

A
A
A
AAAA
Cuối cùng ta hoán chuyển thứ tự các hàng và được ma trận kết quả
CA =
787530
758050
355345
004545
4
2
3
1
4231
A
A
A
A
AAAA
Ta thấy quá trình tạo ra hai tụ: một ở góc trên bên trái chứa các ái lực nhỏ, còn tụ
kia ở góc dưới bên phải chứa các ái lực cao.
c) Thuật toán phân hoạch
Mục đích của hành động tách thuộc tính là tìm tập thuộc tính được truy xuất cùng
nhau hoặc hầu như bằng các tập ứng dụng riêng biệt. Thí dụ, nếu biết hai thuộc tính A
1
và A
2
chỉ được ứng dụng q
1

truy xuất và các thuộc tính A
3
và A
4
được các ứng dụng
khác truy xuất, chẳng hạn q
2
và q
3
, thì quyết định phân mảnh là đương nhiên. Vấn đề là
tìm được thuật toán để xác định các nhóm này.
Xét ma trận thuộc tính tụ CA. Nếu 1 điểm nằm trên đường chéo được cố định, hai
tập thuộc tính sẽ được xác định. Tập {A
1
, , A
i
} ở góc trên trái và tập {A
1+1
, , A
n
} ở
góc dưới phải. Tập thứ nhất gọi là đỉnh (top) và ký hiệu TA , tập thứ hai gọi là đáy
(bottom) và ký hiệu BA.
A
1
A
i
A
i+1
A

n
A
1
: TA
A
i
A
i+1
: BA
A
n
Bây giờ xét tập ứng dụng Q={q
1
, ,q
k
} và định nghĩa các tập ứng dụng chỉ truy xuất
TA, BA hoặc cả hai. Những tập này định nghĩa như sau
AQ(q
i
) = {A
j
use(q
i
,A
j
)=1}
TQ = {q
j
AQ(q
i

)

TA}
BQ = {q
j
AQ(q
i
)

BA}
OQ = Q - {TQ

BQ }
Phương trình đầu định nghĩa tập thuộc tính được truy xuất bởi ứng dụng q
i
; TQ và
BQ tương ứng là các tập ứng dụng chỉ truy xuất TA và BA. còn OQ là tập ứng dụng truy
xuất cả hai.
Ở đây nảy sinh bài toán tối ưu hoá. Nếu có n thuộc tính trong quan hệ, thì sẽ có n-1
vị trí khả hữu có thể là điểm phân chia trên đường chéo của ma trận thuộc tính tụ cho
quan hệ đó. Vị trí tốt nhất để phân chia là vị trí sinh các tập TQ và BQ sao cho tổng các
truy xuất chỉ một mảnh là lớn nhất, còn tổng các truy xuất cả hai mảnh là nhỏ nhất. Vì
thế ta định nghĩa các phương trình chi phí như sau:
∑∑
∈ ∀
=
Qq S
ijij
i j
qaccqrefCQ )()(

∑ ∑
∈ ∀
=
TQq S
ijij
i j
qaccqrefCTQ )()(
∑ ∑
∈ ∀
=
BQq S
ijij
i j
qaccqrefCBQ )()(
∑ ∑
∈ ∀
=
OQq S
ijij
i j
qaccqrefCOQ )()(
Mỗi phương trình 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 hoá được định
nghĩa là bài toán tìm điểm x (1 ≤ x ≤ n) sao cho biểu thức
z = CTQ*CBQ - COQ
2
lớn nhất.
Đặc trưng quan trọng của biểu thức này là nó định nghĩa hai mảnh sao cho giá trị
của CTQ và CBQ càng gần bằng nhau càng tốt. Điều này cho phép cân bằng tải trọng xử
lý khi các mảnh được phân tán đến các vị trí khác nhau. Thuật toán phân hoạch có độ

phức tạp tuyến tính, O(n), theo số thuộc tính của quan hệ.
Để tăng thêm số phương án xét, tức hiệu quả thuật toán, chúng ta cần hiệu chỉnh
thuật toán bằng thủ tục xê dịch thuộc tính như sau. Sau mỗi bước lặp tìm vị trí tốt nhất
cho một thứ tự thuộc tính, ta dịch cột tận trái sang thành cột tận phải, và hàng trên cùng
xuống cuối cùng. Với thao tác xê dịch như thế này ta chỉ cần kểm tra n-1 vị trí trên
đường chéo để tìm trị z lớn nhất. Độ phức tạp của thuật toán sẽ tăng thêm n lần, tức là
O(n
2
).
Với giả thiết đã có thủ tục xê dịch SHIFT, ta có thuật toán phân hoạch PARTITION
sau:
• Thuật toán PARTITION
Đầu vào: ma trận ái lực tụ CA
quan hệ R
ma trận sử dụng thuộc tính ref
ma trận tần số truy xuất acc
Đầu ra: tập các mảnh F
R
={R
1
, R
2
}. với R
1
∩R
2
là khoá.
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 CTQ
n-1
;
Tính CBQ
n-1
;
Tính COQ
n-1
;
gán 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:=n-2 downto 1 do
begin
Tính CTQ
i
;
Tính CBQ
i
;
Tính COQ
i

;
gán z := CTQ
i
* CBQ
i
- (COQ
i
)
2
;
if z > best then
begin
best := z;
ghi nhận điểm tách vào trong hành động
xê dịch
end;
end;{for}
gọi SHIFT(CA);
end;
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 khoá chính của R}
R

2
:=
π
BA
(R)

K
F := {R
1
, R
2
};
end.
◊Ví dụ
Áp dụng thuật toán PARTITION cho ma trận CA từ quan hệ PROJ ở thí dụ
trước. Kết quả là định nghĩa các mảnh F
PROJ
= {PROJ
1
, PROJ
2
}, trong đó
PROJ
1
= {A
1
, A
3
} = { PNO, BUDGET }
PROJ

2
= {A
1
, A
2
, A
4
} = { PNO, PNAME, LOC }
d) Kiểm tra tính đúng đắn
♦ Tính đầy đủ: được đảm bảo 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 1 trong các mảnh.
♦ Tính tái thiết: đảm bảo
R = 
K
R
i

R
i

F
R
.
nếu mỗi R
i
là đầy đủ và chứa thuộc tính khoá của R hoặc chứa mã định bộ (TID -
tuple identifier) được gán bởi hệ thống.
♦ Tính tách biệt: đảm bảo tách biết đối với các thuộc tính không khoá.
III. CHƯƠNG TRÌNH PHÂN MẢNH DỌC
Dựa vào những công thức và thuật toán ở phần trên. Tôi xây dựng một Project để

cấp phát phân mảnh dọc một cách tự động cho hệ thống CSDL phân tán được viết bằng
ngôn ngữ java với phần mềm Netbean 7.2.
Các bước để sử dụng Project.
- Đầu tiên khởi tạo:
+ Nhập số lượng truy vấn.
+ Nhập số lượng thuộc tính.
+ Nhập số lượng các site.
Sau đó nhấn vào nút khởi tạo.
- Nhập dữ liệu.
+ Nhập dữ liệu cho ma trận Use(qi,Aj): Dữ liệu này được lưu vào 1 bảng, các giá
trị trong ô nhận một trong hai giá trị là 0 và 1. Khi một qi nào đó truy vấn một thuộc tính
Aj ta dùng chuột double click hoặc dùng phím Enter để thay đổi giá trị trong ô.
+ Nhập dữ liệu cho ma trận Acc(qi, Sj): Để nhập giá trị cho một ô trong bảng ta
chọn ô cần nhập và đánh giá trị cho ô đã chọn.
- Triết xuất kết quả: Ta bắt sự kiện ActionPerformed() của Button Kết quả để tính:
+ Ma trận AA
+ Ma trận CA.
+ Phân mảnh các vị trí.
TÀI LIỆU THAM KHẢO

[1] Hồ Thuần, Hồ Cẩm Hà (2004, 2005), Các hệ CƠ SỞ DỮ LIỆU lý thuyết và
thực hành, tập 1,2, NXB Giáo dục
[2] Jeffrey D. Ulman, biên dịch Trần Đức Quang (2002), Nguyên lý các hệ CƠ SỞ
DỮ LIỆU và CƠ SỞ TRI THỨC, tập I và II, NXB Thống kê.
[3] Slide bài giảng thầy Đỗ phúc.
[4]Ramzi A. Haraty, Roula C.Fany (2001), Query Acceleration in Distributed
Database Systems, Colombian Journal of Computation. Volume 2, Number 1.
[5] DAVID GEARY, CAY HORSTMANN Addison Wesley, Core JavaServer
Faces , 2004

×