2.2.3. Thuật toán khai thác CSDLPT dọc với phép kết ngoại hai chiều
Do yêu cầu khai thác dữ liệu khác nhau, nhiều khi chúng ta cần khai thác trên CSDL đƣợc tổng hợp từ DB1 và DB2 nhƣ sau: DB=((DB1[TID] DB2[TID]) LEFT JOIN DB1 ON TID) LEFT JOIN DB2 ON TID) Nghĩa là, chúng ta cần khai thác cơ sở dữ liệu từ cơ sở dữ liệu đƣợc tổng hợp từ hai cơ sở dữ liệu (bảng 2.4) trong ví dụ 2.2 ở trên nhƣ sau:
TID A B C D E F G 1 1 1 1 1 2 1 1 1 1 3 1 1 1 1 1 4 1 1 1 1 1 5 1 1 1 1 6 1 1 1 1 1 7 1 1 1 8 1 1 1 9 1 1 1
Hình 2.6. Thuật tốn ECLAT_DISTRIBUTE_FULL_JOIN
Điểm khác nhau chính giữa thuật toán ECLAT_DISTRIBUTE_LEFT_JOIN (2.2.2) so với thuật toán ECLAT_DISTRIBUTE_FULL_JOIN (2.2.3) ở chỗ việc tính tốn các TID của các item đơn thuộc DB2 không cần phải giao với TID của DB1. Điều này nhằm lấy hết những TID có chứa item đơn trong DB2 (do phép kết là phép kết ngoại hai chiều). Nhƣ vậy số lƣợng các item đơn thỏa minsup sẽ tăng lên đáng kể (cụ thể trong ví dụ này là: A,B,C,D,E,F,G so với thuật toán trƣớc là: A,B,C,F,G ), điều này cũng hiển nhiên do yêu cầu khai thác của chúng ta trong thuật toán này ở một CSDL nhiều hơn khi thực hiện phép kết ngoại hai chiều nhằm lấy hết các CSDL có trong DB1 và DB2. Kết quả của thuật toán khi chọn minsup=30% đƣợc thể hiện trong hình 2.7.
ECLAT_DISTRIBUTE_FULL_OUTERJOIN() [] = {i I1: |TID(i)| minSup}
{j I2: |TID(j)| minSup}
ENUMERATE_FREQUENT([]) ENUMERATE_FREQUENT([P])
for all li [P] do [Pi] =
for all lj [P] with j > i do I = li lj
T = t( li ) t( lj ) if |T| minSup then
[Pi] = [Pi] {IT}
Hình 2.7 Kết quả khai thác tập phổ biến trên CSDL phân tán dọc với phép kết ngoại hai chiều
2.2.4. Thuật toán khai thác CSDLPT dọc bằng phép kết tự nhiên
Trong [1] tác giả luận án đã trình bày một thuật tốn khai thác tập phổ biến trên cơ sở dữ liệu phân tán dọc dựa vào phƣơng pháp IT-tree. Điểm mạnh của thuật toán là chỉ quét cơ sở dữ liệu một lần và dựa vào phần giao giữa các Tidset (Transaction identify set) để tính nhanh độ phổ biến. Đối với cơ sở dữ liệu phân tán, việc truyền / nhận dữ liệu giữa các bên cũng mất rất nhiều thời gian. Vì vậy, việc ứng dụng IT- tree trong khai thác tập phổ biến sẽ làm giảm đƣợc số lần gửi/nhận giữa các bên tham gia (chỉ cần một lần gửi/nhận dữ liệu).
Thuật toán:
Đầu vào: CSDL DB1 của bên Master với tập các item là I1, DB2 của bên Slave với tập các item là I2 và ngƣỡng phổ biến minSup.
Kết quả: tập FI gồm tất cả các tập phổ biến của CDSL D thỏa minSup.
Bƣớc đầu tiên lấy TID chung bằng TID của DB1 giao với TID của DB2 (TID= TID(DB1) TID(DB2)). Từ đó xây dựng lớp tƣơng đƣơng ban đầu gồm các Item
đơn của DB1 và DB2 thỏa minsup. Từ lớp tƣơng đƣơng ban đầu đó, thực hiện khai thác theo phƣơng pháp IT-Tree để sinh ra các tập phổ biến thỏa ngƣỡng minsup.
Hình 2.8 Thuật tốn phát sinh tập phổ biến thỏa ngƣỡng minSup
Ví dụ 2.3 (minh họa thuật tốn): Xét CSDL ở 2 bên nhƣ sau:
TID A B C TID D E F G 1 1 1 1 1 1 2 1 1 2 1 3 1 1 3 1 1 4 1 1 1 4 1 6 1 1 1 5 1 1 8 1 1 6 1 1 9 1 7 1 1 8 1 Bên A Bên B
Bảng 2.7 Cơ sở dữ liệu của 2 bên tham gia khai thác
Giả sử chúng ta có 2 cơ sở dữ liệu là: DB1 ở bên (site) A và DB2 ở bên (site) B, Trong các cơ sở dữ liệu, miền giá trị của các TID đều giống nhau. Chúng ta cần khai thác các tập phổ biến gồm các thuộc tính tồn tại trong cả 2 cơ sở dữ liệu để từ đó có thể khai thác luật kết hợp. Lớp tƣơng đƣơng [] ban đầu chứa các item đơn phổ biến có từ 2 cơ sở dữ liệu ở 2 bên. Sau đó gọi hàm ENUMERATE_ FREQUENT(P) với đầu vào là lớp tƣơng đƣơng [P]. Nó xét mỗi li [P] với tất cả
ECLAT()
TID = TID(DB1) TID(DB2)
[] = {i I1: |TID(i) TID| minSup} {i I2: |TID(i) TID| minSup}
ENUMERATE_FREQUENT([]) ENUMERATE_FREQUENT([P])
for all li [P] do [Pi] =
for all lj [P] with j > i do I = li lj
T = t( li ) t( lj ) if |T| minSup then
[Pi] = [Pi] {IT}
các lj đứng sau nó để kết hợp thành một tập mới, nếu tập này thỏa minSup thì bổ sung với lớp tƣơng đƣơng con [Pi] (ban đầu đƣợc khởi tạo bằng rỗng) và gọi đệ qui để sinh các tập phổ biến ở các mức cao hơn.
Bảng 2.8 Cơ sở dữ liệu của bên A kết với bên B (DB1 DB2 )
Từ CSDL sinh bởi DB1 DB2, ta thấy số dòng dữ liệu là 6. Nhƣ vậy, với
minSup = 50%, những tập mục nào có từ 3 dịng dữ liệu trở lên mới thỏa minSup.
Ta có cây biểu diễn các mục đơn của DB1 và DB2 nhƣ hình 2.8.
Các bƣớc tiếp theo thực hiện tƣơng tƣ nhƣ các thuật tốn 2.2.2 và 2.2.3 (đã trình bày ở trên) ta có hình 2.9 và hình 2.10 mơ tả các bƣớc thực hiện và kết quả là các nút của cây chính là các tập phổ biến thu đƣợc.
Khi thực hiện khai thác trên CSDL phân tán dọc với n bên với CSDL lần lƣợt là (DB1, DB2, ...,DBn), một bên bất kỳ sẽ đƣợc coi là Master để thực hiện quá trình khai thác, nhƣ vậy các bên tham gia sẽ gửi dữ liệu cho bên Master khai thác, sau đó nhận kết quả từ Master trả về. Khi một bên nào đó trong số các bên muốn tiến hành khai thác theo yêu cầu riêng thì các bên cịn lại sẽ gửi dữ liệu cho bên đó tiến hành khai thác TID A B C D E F G 1 1 1 1 1 2 1 1 1 3 1 1 1 1 4 1 1 1 1 6 1 1 1 1 1 8 1 1 1
Hình 2.9 Cây biễu diễn các mục đơn của DB1 và DB2
Nhận xét các thuật toán
Vào năm 2005 tác giả M.J.Zaki và các cộng sự đã đề xuất ra phƣơng pháp IT- Tree [29] để khai thác tập phổ biến trên CSDL tập trung. Trong qua trình nghiên cứu các yêu cầu khai thác dữ liệu trên CSDL phân tán, tác giả luận án đã thấy đƣợc ƣu điểm khi áp dụng phƣơng pháp này để thực hiện khai thác trên CSDL phân tán dọc là, sẽ không cần thực hiện các phép kết dữ liệu giữa các bên tham gia, điều đó rất có lợi khi khơng làm sinh ra CSDL lớn (do phép kết các CSDL tạo thành) từ đó sẽ làm giảm thời gian khai thác trên CSDL phân tán dọc. Các thuật toán 2.2.2, 2.2.3, 2.2.4 do tác giả luận án đề xuất đều thực hiện khai thác tập phổ biến trên CSDL phân tán dọc và sau khi tạo đƣợc lớp tƣơng đƣơng ban đầu thì đều thực hiện các bƣớc tiếp theo tƣơng tự phƣơng pháp IT-Tree. Đóng góp của tác giả luận án trong ba thuật toán này là đề xuất việc tạo ra lớp tƣơng đƣơng ban đầu cho các thuật toán khác nhau từ các yêu cầu thực hiện các phép kết khác nhau (left join, outer join, inner join) trên CSDL phân tán dọc.
Thực nghiệm thuật toán
Phần thực nghiệm 3 thuật toán đề xuất, tác giả chỉ chọn thực nghiệm một thuật toán 2.2.4 (thuật toán khai thác CSDL phân tán dọc bằng phép kết tự nhiên) để so sánh về thời gian thực hiện với thuật toán khai thác do tác giả Zaki đề xuất (1.2.1.4). Hai thuật tốn cịn lại (2.2.2, 2.2.3) cũng sẽ cho tỷ lệ chênh lệnh về kết quả thời gian gần tƣơng tự, do trong hai thuật toán (2.2.2,2.2.3) khi tạo ra lớp tƣơng đƣơng ban đầu, mặc dù theo các phép kết khác nhau (kết ngoại và kết ngoại 2 chiều) thì lớp này có số phần tử khác nhau, nhƣng cũng tƣơng ứng khi thực hiện với thuật toán của Zaki [29] trên CSDL tập trung với cùng phép kết. Vì vậy, tỷ lệ thời gian thực hiện cả ba thuật toán này so với [29] là gần tƣơng tự nhau. Chúng tôi tiến hành thực nghiệm thực hiện trên 2 máy có cấu hình nhƣ sau:
Máy 1: cấu hình CPU: Intel Core I3 M380, 2.53GHz, RAM 1GB đóng vai trị khác nhau trong 2 thuật tốn: truyền tồn bộ dữ liệu sang máy 2 (trong trƣờng hợp sử dụng phƣơng pháp IT-tree của Zaki) và truyền các Itemset và Tidset của nó sang
Máy 2: cấu hình CPU: Intel Core I3 M370, 2.4GHz, RAM 4GB đóng vai trị nhận dữ liệu từ máy 1 sau đó thực hiện phép kết dữ liệu để sinh ra CSDL tập trung rồi thực hiện thuật toán 1.2.1.5 để khai thác. Trong trƣờng hợp thực hiện theo thuật toán đề xuất (2.2.4) máy 2 chỉ nhận các itemset và Tidset của chúng từ máy 1 rồi tiến hành khai thác.
Dữ liệu thực nghiệm là CSDL bán hàng của siêu thị CO-OP Mart TP. Hồ Chí Minh, chi nhánh Đinh Tiên Hoàng đã thực hiện giao dịch trong năm 2006. Tổng số mẫu tin tham gia khai thác luật là 1.046.175 mẫu tin với số sản phẩm tham gia trong các giao dịch là 19.124 sản phẩm. Chúng tôi chia dọc CSDL ngẫu nhiên làm hai phần: cho bên máy 1 là 9.203 sản phẩm và bên máy 2 là 9.921 sản phẩm. Tất cả dữ liệu đƣợc chuyển sang dạng bit để giảm chi phí truyền.
Thời gian thực hiện bắt đầu tính từ khi máy 1 bắt đầu quét dữ liệu, truyền dữ liệu cho bên máy 2 và kết thúc khi máy 2 khai thác xong tập phổ biến, hiển thị kết quả khai thác ra màn hình. Kết quả thực nghiệm trong bảng 2.9
Minsup(%) Thuật toán 1.2.1.4 (s) Thuật toán 2.2.4 (s)
20 468.32 213.23
10 623.45 325.52
Bảng 2.9 Kết quả thực nghiệm trên CSDL CO-OP Mart TP.HCM
Từ kết quả thực nghiệm chúng tôi thấy thời gian chạy của thuật toán đề xuất là thấp hơn nhiều so với thời gian thực hiện của thuật toán IT-Tree [29]. Do phải thực hiện việc truyền dữ liệu với khối lƣợng lớn từ DB1 sang DB2, sau đó thực hiện phép kết để sinh ra CSDL chung và tiếp tục quét trên CSDL lớn này để sinh ra lớp tƣơng đƣơng ban đầu nên thuật toán 1.2.1.4 tốn nhiều thời gian thực hiện hơn.
2.3. Khai thác trên cơ sở dữ liệu phân tán ngang 2.3.1. Cách thực hiện 2.3.1. Cách thực hiện
Để thực hiện khai thác trên cơ sở dữ liệu phân tán ngang về bản chất cũng tƣơng tự nhƣ cách thực hiện trong khai thác trên CSDL phân tán dọc. Nghĩa là, một bên cũng sẽ phải gửi dữ liệu của mình cho phía bên kia để mỗi bên đều có dữ liệu của
nhau. Sau đó các bên thực hiện phép hội để sinh ra dữ liệu có sự kết hợp từ hai bên. Từ dữ liệu đó, tiến hành khai thác dữ liệu theo các phƣơng pháp truyền thống.
a b c d 1 1 1
2 1 1 1
3 1 1 1
Bảng 2.10 Cơ sở dữ liệu của Master a b c d a b c d 4 1 1 1 5 1 1 1 1 6 1 1 7 1 1 1 8 1 1
Bảng 2.11 Cơ sở dữ liệu của Slave a b c d a b c d 1 1 1 2 1 1 1 3 1 1 1 4 1 1 1 5 1 1 1 1 6 1 1 7 1 1 1 8 1 1
Bảng 2.12 Cơ sở dữ liệu sau khi hội Master và Slave
Bảng 2.10 và 2.11 thể hiện ví dụ về cơ sở dữ liệu của hai bên tham gia khai thác dữ liệu trên cơ sở dữ liệu phân tán ngang (nghĩa là có cùng một lƣợc đồ và có dữ liệu độc lập). Ở đây, tập các items của các bên tham gia khai thác là giống nhau.
khi nhận đƣợc dữ liệu, các bên đều thực hiện phép hội để sinh ra cơ sở dữ liệu nhƣ bảng 2.12. Từ cơ sở dữ liệu này các bên có thể sử dụng các thuật tốn khai thác cơ bản (đã trình bày ở chƣơng 1) để khai thác tập phổ biến và từ đó sinh luật.
2.3.2. Nhận xét phƣơng pháp
Phƣơng pháp khai thác luật trên cơ sở dữ liệu phân tán ngang nhƣ vừa trình bày ở 2.3.1 là chƣa quan tâm đến bảo tồn tính riêng tƣ của các bên tham gia quá trình khai thác. Các bên, khi tham gia khai thác luật vẫn phải gửi dữ liệu cho nhau nên việc tiết lộ hồn tồn thơng tin của bên này cho bên đối diện là chắc chắn. Vấn đề đặt ra cũng giống nhƣ đối với khai thác trên cơ sở dữ liệu phân tán dọc, nghĩa là làm sao để có thể khai thác đƣợc dữ liệu để phục vụ cho công việc của các bên tham gia mà vẫn không làm tiết lộ thông tin riêng của từng bên cho các bên kia biết, hoặc tránh thông đồng giữa một số bên trong hệ thống khai thác để làm lộ dữ liệu của một hay nhiều bên cịn lại. Thuật tốn khai thác dữ liệu phân tán ngang có quan tâm đến việc bảo tồn tính riêng tƣ của dữ liệu các bên sẽ đƣợc trình bày trong chƣơng 3.
2.4. Khai thác song song tập phổ biến trên CSDL phân tán 2.4.1. Đặt vấn đề 2.4.1. Đặt vấn đề
Một hệ thống siêu thị có bán n mặt hàng I = {i1, i2, …in}, do yêu cầu chuyên biệt hóa các sản phẩm của mỗi cửa hàng (và cũng tránh việc lƣu trữ quá tải cho một máy), siêu thị muốn lƣu trữ các giao dịch mua hàng của khách hàng tại k máy tính. Mỗi máy tính chịu trách nhiệm lƣu trữ một tập các mặt hàng phân biệt có trong các giao dịch. Có thể mơ hình hóa nhƣ sau: Cơ sở dữ liệu D đƣợc chia thành k mảnh (mỗi mảnh nằm trên một máy) {D1, D2, …, Dk}, trong đó Dj chứa tập các mặt hàng (item) Ij = { v j j j i i i , ,..., 2
1 } (v là số lƣợng mặt hằng đƣợc lƣu trữ tại Dj), các giao dịch trong Dj chỉ chứa các mặt hàng có trong Ij, với
Ii Ij=, ij và k j j I 1 = I.
Vấn đề đặt ra là làm thế nào tận dụng các máy tram (Slave) để khai thác hiệu quả tập phổ biến trên cơ sở dữ liệu D = D1 D2 … Dk?
Tid Items 1 A, B, D, E, F, G 2 B, C, E, F 3 A, B, E, F, G 4 A, B, C, E, F, H 5 A, B, C, D, E, G 6 B, C, D, G, H
Giả sử cơ sở dữ liệu trên đƣợc chia làm 2 mảnh với I1 = {A, B, C, D} và I2 = {E, F, G, H}.Ta có dữ liệu tại 2 mảnh nhƣ sau:
Mảnh 1 (Slave 1) Mảnh 2 (Slave 2) Tid Items Tid Items 1 A, B, D 1 E, F, G 2 B, C 2 E, F 3 A, B 3 E, F, G 4 A, B, C 4 E, F, H 5 A, B, C 5 E, G 6 B, C, D 6 G, H Bảng 2.14 CSDL phân tán từ bảng 2.13 2.4.2. Mơ hình khai thác
Trong mơ hình này, giữa Slave và Master có sự trao đổi thơng tin 2 chiều. Master sẽ gửi cho từng Slave thông tin về CSDL cần khai thác và minSup (ngƣỡng độ phổ biến tối thiểu). Từng Slave sẽ khai thác độc lập các tập phổ biến có trong cơ sở dữ liệu cục bộ và gửi kết quả này về Master. Bên cạnh đó, các mục dữ liệu (item) có độ phổ biến thỏa minSup cũng sẽ đƣợc gửi về Master cùng với Tidset (tập định danh các giao dịch có chứa item). Master sẽ dựa vào các thông tin này để khai thác các tập phổ biến còn lại (chƣa đƣợc khai thác từ các Slave).
Master Site L oc at ion N TCP/IP TCP/IP L oc ati on 3
Hình 2.11 Mơ hình tổng quát khai thác trên CSDL phân tán ngang
Mơ hình chi tiết về trao đổi thơng tin giữa Master và Slave :
Hình 2.12 Trao đổi thơng tin và khai thác tập phổ biến giữa Master và Slave
Phía Master: Đầu tiên, Master sẽ gửi yêu cầu khai thác đến tất cả các Slave (tên CSDL, minSup) và chờ nhận thông tin từ Slave (danh sách các item thỏa minSup cùng với Tidset của chúng). Sau khi đã nhận đủ các thông tin từ Slave, Master sẽ gọi thuật toán PEclat (đƣợc trình bày trong phần 2.4.3).
Phía Slave: Khi nhận đƣợc thông tin từ Master, Slave sẽ đọc CSDL cục bộ để lọc ra các item có độ phổ biến thỏa minSup cùng với danh sách các Tid của chúng để gửi về Master. Đồng thời, trên từng Slave sẽ khai thác tập phổ biến từ CSDL cục bộ, danh sách các tập phổ biến sẽ đƣợc gửi về Master để tổng hợp kết quả.
Xét CSDL ở bảng 2.13 với minSup = 50%, ta có: MASTER:
1. Gửi thông tin sang các Slave (yêu cầu về CSDL, minSup)
2. Chờ nhận các item cùng với Tidset của nó từ các Slave. Khi đã nhận đủ thơng tin, nó sẽ gọi thuật tốn PEclat (đƣợc trình bày trong phần 2.4.3).
3. Chờ nhận các tập phổ biến từ các Slave.
SLAVE:
1. Chờ nhận thông tin từ Master. 2. Đọc CSDL cục bộ để:
Gửi các item thỏa minSup và Tidset của chúng về Master để khai thác.
Hình 2.13 Kết quả khai thác từ Slave 1 theo thuật toán Eclat
Hình 2.14 Kết quả khai thác từ Slave 2 theo thuật toán Eclat
Nhƣ vậy, sau khi nhận đƣợc các tập phổ biến từ các Slave, Master đã có 10 tập