2.2. Khai thác trên cơ sở dữ liệu phân tán dọc
2.2.2. Thuật toán khai thác trên CSDL phân tán dọc với phép kết ngoại
Giả sử chúng ta cần khai thác trên cơ sở dữ liệu DB = (DB1 LEFT JOIN DB2 ON TID). Nhƣ đã trình bày ở trên (2.2.1), việc phải thực hiện phép kết trong CSDL phân tán dọc sẽ cho ra quan hệ mới chứa khối lƣợng dữ liệu lớn (nếu DB1 và DB2 đủ lớn), việc phải khai thác trên một CSDL lớn sẽ mất rất nhiều thời gian. Dựa vào phƣơng pháp IT-Tree[29] tác giả luận án [2] đã đề xuất thuật tốn Eclat_Distribute_ Left_Join khơng phải thực hiện phép kết để tránh sinh ra CSDL lớn dẫn đến thời gian thực hiện khai thác nhanh hơn so với việc phải thực hiện phép kết sinh ra dữ
đúng 1 lần để sinh ra lớp [] ban đầu. Từ đó gọi hàm Enumerate_Frequent và truyền vào lớp [] ban đầu.
Thuật toán:
Đầu vào: cơ sở dữ liệu 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.
Đầu ra: tập FI gồm tất cả các tập phổ biến của CSDL DB thỏa minSup. Phƣơng pháp thực hiện:
Lớp tƣơng đƣơng [] ban đầu chứa các item đơn phổ biến của DB1 và DB2. Riêng đối với DB2 thì phải lấy TID của mỗi item đơn giao với TID của DB1(do phép kết là Left join). Sau đó thuật tốn 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ả 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. Điểm mạnh của thuật toán là chỉ quét cơ sở dữ liệu ở hai bên một lần và dựa vào phần giao giữa các Tidset để tính nhanh độ phổ biến. Nhƣ vậy chúng ta thấy, từ hai CSDL ban đầu (DB1 và DB2), không cần phải thực hiện phép kết chúng ta vẫn có thể khai thác đƣợc từ CSDL có đƣợc do hai CSDL tạo ra.
Hình 2.2 Thuật tốn ECLAT_DISTRIBUTE_LEFT_JOIN
Ví dụ 2.2 (Minh họa thuật toán): Xét cơ sở dữ liệu ở 2 bên nhƣ sau:
ECLAT_DISTRIBUTE_LEFT_JOIN()
TID = TID(DB1)
[] = {i I1: |TID(i)| minSup}
{j I2: |TID(j) 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}
Bảng 2.4 Cơ sở dữ liệu của 2 bên tham gia khai thác
Giả sử chúng ta muốn thực hiện khai thác tập phổ biến trên CSDL DB= (DB1 Left join DB2) với minsup=40% (3TIDS). Nếu thực hiện phép kết nửa trái (Left join) ta có bảng cơ sở dữ liệu sinh bởi phép nửa kết trái (Left join) dựa trên thuộc tính TID của hai bê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 6 1 1 1 1 1 8 1 1 1 1 9 1 1
Bảng 2.5 Cơ sở dữ liệu kết ngoại (Left join)
Tuy nhiên để tránh thực hiện phép kết nửa trái này, tác giả luận án đã đề xuất sử dụng thuật toán IT-Tree của tác giả M.J.Zaki và các cộng sự đã đề xuất trong [32]. Từ CSDL ban đầu DB1 của bên Master chúng ta khởi tạo xây dựng cây lớp tƣơng đƣơng nhƣ trong hình 2.3 bằng cách lấy TID của các Item đơn A,B,C thỏa ngƣỡng minsup.
Bƣớc kế tiếp chúng ta sẽ lấy thêm các TID của các Item đơn thuộc CSDL DB2 bằng cách thực hiện phép giao giữa TID của chúng với TID của DB1 (TID(F) =135678 1234689 =1368) và so sanh với minsup, nếu thỏa, thêm các Item này vào lớp tƣơng đƣơng ban đầu. Thực hiện với tất cả các Item đơn của DB ta có kết
TID A B C 1 1 1 2 1 1 3 1 1 4 1 1 1 6 1 1 1 8 1 1 9 1 1 Bên master (DB1) TID D E F G 1 1 1 2 1 1 3 1 1 1 4 1 1 5 1 1 1 1 6 1 1 7 1 1 1 8 1 1 Bên Slaver (DB2)
Bƣớc tiếp theo thuật toán sẽ lần lƣợt lấy phần giao của các Item với các Item thuộc các nhánh bên phải cùng mức (TID(AB)=TID(A) TID(B)=13469123468 =1346) nếu thỏa minsup thì thêm Item này vào thành nút của cây ở mức kế tiếp. Thực hiện với tất cả các nút của cây, ta có kết quả là các tập phổ biến nhƣ trong cây hình 2.5.
Hình 2.4 Biểu diễn các mục đơn của DB1 và DB2Hình 2.3 Biểu diễn các mục đơn của DB1 Hình 2.3 Biểu diễn các mục đơn của DB1
Hình 2.5 Kết quả khai thác trên CSDL phân tán với phép kết Left Join