Hệ cơ sở dữ liệu phân tán được mô tả như là tập hợp nhiều cơ sở dữ liệu có liên quan logic đến nhau và được phân bố trên mạng máy tính.. Trong cơ sở dữ liệu phân tán các tập tin dữ liệu
Trang 1MỤC LỤC
1 Các khái niệm về hệ cơ sở dữ liệu phân tán 2
2 Thiết kế cơ sở dữ liệu phân tán 2
2.1 Các kiểu phân mảnh: 2
2.1.1 Phân mảnh ngang: 3
2.1.2 Phân mảnh dọc: 4
3 Phương pháp phân mảnh dọc 6
3.1 Phương pháp nhóm: 6
3.2 Phương pháp tách: 6
3.3 Thuật toán gom cụm: 8
3.4 Thuật toán BEA (Bond Energy Algorithm) 9
3.5 Thuật toán phân hoạch thuộc tính: 11
3.6 Thuật toán PARTITION 12
4 Chương trình Demo phân mảnh dọc: 15
4.1 Chương trình được viết trên ngôn ngữ C# 2005 15
4.2 Giao diện nhập dữ liệu của chương trình: 15
4.3 Kết quả: 17
5 Tài liệu kham khảo: 17
Trang 2CƠ SỞ DỮ LIỆU PHÂN TÁN
1 Các khái niệm về hệ cơ sở dữ liệu phân tán
Hệ cơ sở dữ liệu phân tán (Distributed DataBase System) được xây dựng dựa trên hai công nghệ cơ bản là cơ sở dữ liệu và mạng máy tính Hệ cơ sở dữ liệu phân tán được
mô tả như là tập hợp nhiều cơ sở dữ liệu có liên quan logic đến nhau và được phân bố trên mạng máy tính
Trong khái niệm được mô tả về cơ sở dữ liệu phân tán ở trên có hai đặc trưng cơ bản là “liên quan logic” và “phân bố trên mạng” Trong cơ sở dữ liệu phân tán các tập tin
dữ liệu được lưu trữ độc lập trên các nút của mạng máy tính và phải có liên quan đến nhau về mặt logic và còn đòi hỏi chúng phải được truy xuất đến qua một giao diện chung, thống nhất
Hệ Quản trị cơ sở dữ liệu phân tán (Distributed DBMS) là hệ thống phần mềm cho phép quản lý các hệ cơ sở dữ liệu phân tán và làm cho sự phân tán trở nên “trong suốt” đối với người sử dụng
2 Thiết kế cơ sở dữ liệu phân tán
Một cơ sở dữ liệu phân tán dựa trên mô hình quan hệ trước hết phải tuân thủ các quy tắc về chuẩn hóa cho cơ sở dữ liệu quan hệ Để 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)
2.1 Các kiểu phân mảnh:
Trong phần này ta đang xét hệ cơ sở dữ liệu phân tán dựa trên các lược đồ quan hệ, tức là các bảng, như vậy sự phân mảnh chính là là hoạt động chia một bảng thành các bảng nhỏ hơn Để phân tích sự phân mảnh ta lấy các quan hệ EMP, PROJ, PAY, ASG
EMP
Trang 3E7 Algor Ks Cơ Khí
ASG
PROJ
PAY
Ks Hệ thống 7000
Ks Lập trình 2000
2.1.1 Phân mảnh ngang:
Giả sử ta có một yêu cầu phân mảnh quan hệ PROJ thành hai bảng PROJ1 và PROJ2 sao cho một bảng chứa các dự án có ngân sách lớn hơn 100000 và cái kia chứa các dự án có ngân sách nhỏ hơn 100000
Trang 4PROJ2
2.1.2 Phân mảnh dọc:
Cũng quan hệ PROJ ta phân mảnh thành hai bảng PROJ3 và PROJ4, khóa của quan hệ PNo có mặt ở cả hai bảng con
PROJ3
PROJ4
Trong thực tế sự phân mảnh sẽ xảy ra việc kết hợp cả hai loại phân mảnh và ta gọi
là sự phân mảnh hỗn hợp Mức độ phân mảnh tùy theo yêu cầu của ứng dụng, phân mảnh quá lớn hay quá nhỏ đều gây ra các hiệu ứng phụ khó kiểm soát
Các quy tắc phân mảnh:
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
Tính đầy đủ:
Nếu một quan hệ R được phân mảnh thành các mảnh con R1, R2, , Rn 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 mảnh 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
Trang 5Tí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 R1, R2, , Rn thì phải định nghĩa được một toán tử quan hệ V sao cho R = ¿i=1¿n R i
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 R1, R2, , Rn
Đối với phân mảnh ngang mục di đã nằm trong mảnh Rj thì nó sẽ không nằm mtrong mảnh Rk 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
Trang 63 Phương pháp phân mảnh dọc
Phương pháp phân mảnh dọc tạo ra các quan hệ nhỏ hơn để giảm tối đa thời gian thực hiện của ứ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 R1, R2,…, Rn 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
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 mm Chẳng hạn m=10 thì B(m)≈115.000, với m=15 thì B(m)≈109, với m=30 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
3.1 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 đó
3.2 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
Gọi Q = {q1, q2, , qt} là tập các câu vấn tin mà ứng dụng sẽ truy xuất trên quan
hệ R(A1, A2, , An) Với mỗi câu vấn tin qi và 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 là use (qi, Aj) được định nghĩa như sau:
use(qi , Aj)={1 nếu Aj được vấn tin qi sử dụng 0 trong trường hợp ngược lại
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
Trang 7Ví dụ: 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ó:
PROJ
q1: Tìm ngân sách của dự án theo mã số
SELECT Budget
WHERE PNo = value q2: Tìm tên và ngân sách của tất cả các dự án
SELECT PName
q3: Tìm tên của dự án theo vị trí
WHERE Loc = value
Để 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:
A 1 A 2 A 3 A 4
q 1 1 0 ¿ 0¿q 2¿0¿1¿1¿0¿q 3¿0¿1¿0¿1¿q 4¿0¿0¿1¿1¿
Ta nhận thấy rằng giá trị sử dụng không chứa thông tin về độ lớn của tần số ứng dụng, số đo này nằm trong định nghĩa về số đo ái lực thuộc tính aff (Ai, Aj)
aff (Ai, Aj) = ∑
k : use(q k , A i) =1 ∩ use (q k , A j) =1∑
∀ S l
ref(q k) acc l(q k)
Trang 8trong đó ref(qk) là số truy xuất đến các thuộc tính (Ai, Aj) cho mỗi ứng dụng của
qk tại vị trí Sl và acc(qk) 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ụ: Sử dụng lại ví dụ trên, giả sử ref(qk) = 1 cho tất cả qk và Sl Số đo tần số truy xuất ứng dụng giả sử như sau:
acc1(q1)=15 acc2(q1)=20 acc3(q1)=10
acc1(q2)=5 acc2(q2)=0 acc3(q2)=0
acc1(q3)=25 acc2(q3)=25 acc3(q3)=25
acc1(q4)=3 acc2(q4)=0 acc3(q4)=0
Như vậy chúng ta tính số đo ái lực giữa các thuộc tính A1 và A3 và bởi vì ứng dụng duy nhất truy xuất đến cả hai thuộc tính này là q1 nên ta có:
aff(A1,A3) = ∑
k =1
1
∑
l =1
3
acc l(q k)=acc1(q1)+¿acc2(q1)+acc3(q1)=45¿
Ma trận ái lực thuộc tính đầy đủ như sau:
AA = A 1 A 2 A 3 A 4 A 1 45 0 ¿ 0¿A 2¿0¿80¿5¿75¿A 3¿45¿5¿53¿3¿A 4¿0¿75¿3¿78¿
3.3 Thuật toán gom cụm:
Lấy ma trận ái lực AA và tổ chức lại thứ tự của các thuộc tính để tạo ra 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
AM =∑
i=1
n
∑
j=1
n
aff(A i , A j).¿ ¿ ¿
trong đó aff(A0,Aj) = aff(Ai,A0) = aff(An+1,Aj) = aff(Ai,An+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 hoán 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 =∑
i=1
n
∑
j=1
n
aff(A i , A j).¿ ¿ ¿
Giữa hai thuộc tính Ax và Ay, chúng ta định nghĩa cầu nối Bond:
Trang 9Bond( A x , A y)=∑
z =1
n
aff(A z , A x) aff (A z , A y)
Chúng ta có cách tính AM theo định nghĩa Bond như sau:
AM =∑
j =1
n
[bond(A j , A j−1)+bond( A j , A j +1)]
Đóng góp thực cho số đo ái lực chung khi đặt Ak giữa Ai và Aj là:
cont(Ai,Ak,Aj) = 2bond(Ai,Ak) + 2bond(Ak,Aj) – 2bond(Ai,Aj)
Ví dụ: Ta có ma trận ái lực AA được tính như trên, tính đóng góp thực khi chuyển thuộc tính A4vào giữa hai thuộc tính A1 và A2 là:
cont(A1,A4,A2) = 2bond(A1,A4) + 2bond(A4,A2) – 2bond(A1,A2)
Ta đã có các giá trị bond như sau:
bond(A1,A4) = 45*0 + 0*75 + 45*3 + 0*78 = 135 bond(A4,A2) = 0*0 + 80*75 + 5*3 + 75*78 = 11865 bond(A1,A2) = 45*0 + 0*80 + 45*3 + 0*75 = 225
Cont(A1,A4,A2) = 2*135 +2*11865 – 2*225 = 23550
Ta có một thuật toán dung để thực hiện việc gom cụm các thực thể, đó là thuật toán BEA (Bond Energy Algorithm)
3.4 Thuật toán BEA (Bond Energy Algorithm)
Nhập: Ma trận ái lực AA
Xuất: Ma trận ái lực gom cụm CA
Begin
//Khởi tạo
CA(*,1) = AA(*,1);
CA(*,2) = AA(*,2);
index = 3;
While (index <=n) do
Trang 10For i=1 To index-1 Do tính cont(Ai-1, Aindex, Ai);
Tính cont(Aindex-1, Aindex, Aindex+1);
loc = vị trí đặ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ụ: Ứng dụng thuật toán BEA để xem xét quá trình gom cụm các thuộc tính của quan hệ PROJ ở trên:
Đầu tiên ta đặt cột A1 và A2 của AA vào ma trận CA Tiếp theo ta xét cột A3 Có 3 cách đặt vị trí của cột A3 như sau: A3-A1-A2 , A1-A3-A2 , A1-A2-A3
Các đóng góp cho số đo ái lực chung của mỗi vị trí được tính như sau:
Trường hợp: A3-A1-A2
Cont(_,A3,A1) = 2bond(_,A3) + 2bond(A3,A1) – 2bond(_,A1)
= 0 + 8820 + 0 = 8820 Trường hợp: A1-A3-A2
Cont(A1,A3,A2) = 2bond(A1,A3) + 2bond(A3,A2) – 2bond(A1,A2) = 10150 Trường hợp: A1-A2-A3
Cont(A2,A3,_) = 2bond(A2,A3) + 2bond(A3,_) – 2bond(A2,_) = 1780
Ta thấy trường hợp A1-A3-A2 có số đóng góp lớn nhất nên vi trí này được chọn
3.5 Thuật toán phân hoạch thuộc tính:
A1 A2 … Ai Ai+1 …… An
Trang 11A2
…
Ai
TA
Ai+1
…
An
BA
TA : tập đỉnh Top
BA: Tập đỉnh đáy
Xét tập ứng dụng Q = {q1, q2, …, qi}
Đị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 chỉ truy cập vừa TA và BA Và
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 các thuộc tính bởi các ứng dụng chỉ truy cập BA
COQ = tổng số các truy cập đến các thuộc tính bởi các ứng dụng truy cập
cả TA và BA
Sau đó tìm điểm dọc theo đường chéo làm cực đại
CTQ*CBQ-COQ2
Trang 123.6 Thuật toán PARTITION
Nhập: Ma trận ái lực CA, 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
Xuất: F tập các mảnh dọc
Begin
Z là vị trí thuộc cột thứ 1;
Tính CTQ1 ;
Tính CBQ1 ;
Tính COQ1;
Best = CTQ1 * CBQ1 – COQ12
For i=2 To n-1 Do
Begin
Tính CTQi ; Tính CBQi ; Tính COQi ; Z= CTQi * CBQi – COQi2 ;
IF z>best Then best=z End
R1 := ∏TA(R) ∪ K;
R2 := ∏BA(R) ∪ K;
F := R1∪R2
End
Ví dụ: Ta có các dữ liệu theo ví dụ ở trên:
Trang 13acc1(q1)=15 acc2(q1)=20 acc3(q1)=10
acc1(q2)=5 acc2(q2)=0 acc3(q2)=0
acc1(q3)=25 a cc2(q3)=25 acc3(q3)=25
acc1(q4)=3 acc2(q4)=0 acc3(q4)=0
A 1 A 2 A 3 A 4
q 1 1 0 ¿ 0¿q 2¿0¿1¿1¿0¿q 3¿0¿1¿0¿1¿q 4¿0¿0¿1¿1¿
Ta có các phương án phân mảnh sau:
Phương Án 1:
TA = {A1}
BA = {A2, A3, A4}
TQ ={}
BQ ={q2, q3, q4}
OQ = {q1} CTQ = 0 CBQ = acc1(q2) + acc2(q2) + acc3(q2) + acc1(q3) + acc2(q3) + acc3(q3) +
acc1(q4) + acc2(q4) + acc3(q4) = 83 COQ = 45
z= -2025 Phương Án 2:
TA = {A1, A3}
BA = {A2, A4}
TQ ={q1}
BQ ={q3}
OQ = {q2, q4} CTQ = 45 CBQ = 75
Trang 14COQ = 8 z= 3311 Phương Án 3:
TA = {A1, A3, A2}
BA = {A4}
TQ ={q1, q2}
BQ ={}
OQ = {q3, q4} CTQ = 50 CBQ = 0 COQ = 78 z= -6084
Ta chọn phương án 2 làm điểm phân chia vì tại vị trí này giá trị chi phí là cao nhất Như vậy chúng ta có PROJ1 = {A1, A3} và PROJ2 = {A1, A2, A4} Tức là PROJ1= {PNo, Budget} và PROJ2 = {PNo, PName, Loc}
Trang 154 Chương trình Demo phân mảnh dọc:
4.1 Chương trình được viết trên ngôn ngữ C# 2005.
4.2 Giao diện nhập dữ liệu của chương trình:
Ta nhập số thuộc tính vào ô Enter Attributes
Ta nhập số câu truy vấn vào ô Enter Queries
Ta nhập số site vào ô Enter Sites
Sau đó nhấn nút Show Matrix để hiển thị ma trận Use và ma trân Access như hình sau:
Trang 16Tại đây ta nhập dữ liệu cho 2 ma trận Use và Access, sau đó chọn khóa trong khung Primary Key (nếu có khóa)
Nhấn nút Calculator để tính ma trận AA và CA và phân mảnh
Trang 174.3. Kết quả:
Để thực hiện tính toán lại Ta cần nhấn nút Clear để xóa các dữ liệu củ.
5 Tài liệu kham khảo:
Slide bài giảng về Cơ Sở Dữ Liệu Phân Tán của PGS.TS Đỗ Phúc
http://www.scribd.com/doc/67770884/15/Thi%E1%BA%BFt-k%E1%BA%BF-s
%E1%BB%B1-phan-m%E1%BA%A3nh-d%E1%BB%AF-li%E1%BB%87u