TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010
CẢI TIẾN THUẬT TOÁN CẬP NHẬT GIA TĂNG CÁC KHUNG NHÌN THỰC KIỂU SPJ
IMPROVEMENT OF THE INCREMENTAL ACTUALIZATION ALGORITHM FOR THE SPJ MATERIALIZED VIEWS
Nguyễn Trần Quốc Vinh Trường Đại học Kinh tế, Đại học Đà Nẵng
TÓM TẮT
Khung nhìn thực (materialized view, KNT) kiểu Select-Project-Join (SPJ) là KNT dựa trên truy vấn chỉ chứa các phép chọn, chiếu và nối, không bao gồm các phép toán thống kê như SUM, COUNT, AVG, MIN, MAX... Kết quả thực thi nó có thể chứa các bản ghi trùng lặp. Có thể nói rằng, thuật toán cập nhật gia tăng sử dụng số đếm số lần lặp lại của các bản ghi trong KNT là hiệu quả nhất đối với các KNT kiểu SPJ. Bài viết trình bày cải tiến trong cách tính số đếm và đề nghị thuật toán cập nhật gia tăng các KNT kiểu SPJ có sử dụng cách tính số đếm đã được cải tiến.
ABSTRACT
The SPJ (Select-Project-Join) materialized views are the materialized views based on the queries that contain only the operations : selection, projection and join, excluding the aggregate functions such as SUM, COUNT, AVG, MIN, MAX... The result of their execution can contain duplicated records. It should be noted that the incremental update algorithm using the counter of the duplication of the records is the most effective on the SPJ materialized views. In this paper the improvement of a method for calculating that counter is presented and an algorithm for incremental updates of the SPJ materialized views with improved counter calculation is also suggested.
1. Đặt vấn đề
Có nhiều thuật toán khác nhau được phát triển để thực hiện cập nhật gia tăng (CNGT) các KNT nói chung và KNT kiểu SPJ nói riêng. Trong đó, n hiều công trình đã công bố [1–5] nghiên cứu thuật toán cập nhật các KNT kiểu SPJ sử dụng số đếm (counter) số lần lặp lại của các bản ghi trong KNT. Từ các công trình này có thể thấy rằng, thuật toán sử dụng số đếm là hiệu quả nhất đối với CNGT các KNT kiểu SPJ. Trong thuật toán đó, số đếm được lưu trong bản ghi của KNT như là một trường riêng biệt. Số đếm sẽ được tăng (giảm) một đơn vị tương ứng với mỗi bản ghi trùng khớp được thêm mới vào (xoá từ) KNT. Qua nghiên cứu các thuật toán đã được công bố, tác giả nhận thấy có thể cải tiến thuật toán đó để nâng cao hiệu quả của nó trong một số trường hợp.
KNT kiểu SPJ 2.
50
KNT – kết quả thực thi của các truy vấn được giữ lại trong các bảng riêng biệt , được tạo ra với ý tưởng ban đầu là một công cụ hỗ trợ cho các kho dữ liệu và các hệ thống hỗ trợ ra quyết định. Tuy nhiên, nó có thể được ứng dụng cho bất kỳ CSDL nào.
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010
=
=
Z
Z
(
F C T ,
,
)
KNT chỉ được triển khai thực tế cách đây không lâu trong các phiên bản cuối cùng của ba HQT CSDL thương mại Oracle, MS SQL Server và IBM DB2. Thực tế, mỗi hệ quản trị cơ sở dữ liệu có hỗ trợ KNT có thể có các ràng buộc về cấu trúc của truy vấn chọn lựa dữ liệu để tạo KNT [6, 7]. Nhưng về mặt lý thuyết, có thể tạo KNT trên cơ sở bất kỳ truy vấn nào, kể cả truy vấn phức tạp nhất với đầy đủ các thành phần cấu trúc và hàm cho phép trong cấu trúc của một truy vấn SELECT. KNT kiểu SPJ là KNT được tạo ra trên cơ sở truy vấn SPJ – truy vấn chỉ chứa các phép chọn, chiếu và nối; kết quả thực thi các truy vấn có thể chứa các bản ghi trùng lặp, nhưng không bao Truy vấn tạo KNT gồm các phép toán thống kê (SUM, COUNT, AVG, MIN, MAX…). kiểu SPJ thứ j có thể được biểu diễn như sau:
mv
j
j
j
j
=
.
F
F
∪ – tập hợp các trường của KNT thứ j;
j
C j
S
jF – tập hợp các trường lựa chọn của truy vấn thứ j;
jC – câu điều kiện lựa chọn WHERE;
C
jF – tập hợp các trường từ câu điều kiện lựa chọn WHERE
jC ;
=
=
F Với S j
T
N
1, 2,..
}
T j
T k { j k
j .
– tập hợp các bảng gốc (base tables, BG) được sử dụng
jZ
del
ins
trong
kjT ) – tập hợp các bản ghi (từ đây về sau, tập hợp các bản ghi có nghĩa là
Ngoài ra, ta sẽ sử dụng một số ký hiệu sau đây: kjT (
kjT ;
del
ins
kjT (
kjT );
(
)
T<
> ) – bản ghi của KNT tương ứng với bản ghi được
j
j
ins j k
del j k
kjT > (< del < ins kjT >) – một bản ghi trong tập > ( T< F ) ( F thêm mới (xoá từ) BG.
tập có thể chứa các phần tử trùng lặp) được thêm vào (xoá từ) BG
Cứ mỗi khi dữ liệu trong các BG được cập nhật, các KNT sử dụng các dữ liệu đó trở nên không thực tiễn. Để duy trì các bảng KNT trong trạng thái thực tiễn (actual state), cần phải cập nhật chúng mỗi khi có sự thay đổi dữ liệu (insert, update, delete) trong các BG. Quá trình làm cho dữ liệu trong KNT tương ứng với dữ liệu trong các BG được gọi là sự thực tiễn hoá (actualization, cập nhật).
51
Tuỳ thuộc vào cách thức thực hiện, cập nhật được chia thành ba phương pháp chính, đó là cập nhật hoàn toàn (COMPLETE), cập nhật gia tăng (INCREMENTAL hay còn gọi là FAST) và ép buộc (FORCE) [8]. Cập nhật hoàn toàn thực tế là thực thi lại truy vấn trên cơ sở KNT đã được tạo ra và lưu kết quả vào KNT . CNGT chỉ thực hiện điều chỉnh phần dữ liệu trong KNT liên quan đến các sửa đổi dữ liệu trong các BG. Cập nhật ép buộc nghĩa là khi có khả năng thì thực hiện CNGT, còn nếu không thì sử dụng cập nhật hoàn toàn. Trong hầu hết các trường hợp có thể thực hiện CNGT đối với các KNT kiểu SPJ.
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010
Cải tiến thuật toán CNGT KNT kiểu SPJ bằng cách sử dụng số đếm 3.
3.1. Cải tiến cách tính số đếm
ins
del
Đề nghị sử dụng cách thức sau đây để tính các truy vấn SQL tính các tập hợp
jZ vào (hoặc xoá
jZ từ) KNT trong quá trình CNGT.
ins
ins
kjT
kjT
bản ghi cần phải thêm mới
del
>
>
F
(
T<
)
F
(
T<
)
j
j
> trong tập hợp các bản ghi được thêm vào (tương tự
kjT
ins j k
del j k
ins
=
<
>
Cho mỗi bản ghi < del kjT ) kiểm tra xem bản ghi > và (
CNT
))
T
(
(
j
ins j k
del
=
<
>
CNT
COUNT F
T
(
(
))
j
kjT
del j k
cho trường hợp xoá, < ) có mặt trong KNT hay không. Nếu có, thì tính giá trị CNT – số lần lặp lại của một bản ghi COUNT F trong KNT. Tiếp theo, tính số cho trường hợp thêm mới và
cho trường h ợp xo á từ BG . Nếu hai bản ghi của BG
mod(
= và ) 0
mod(
del
ins
CNT CNT
< kjT > có mặt trong KNT và giá trị các trường của chúng có mặt trong KNT trùng nhau, thì các số lượng lặp lại của chúng trong KNT giống nhau . Khẳng định này được suy ra = . Từ đó từ định nghĩa của phép nối JOIN. Theo đó, ) 0
CNT CNT CNT ins CNT
<
suy ra, có thể tăng (giảm) số đếm trong KNT thêm một giá trị bằng (xuống một
<
> và loại bỏ
T
> < (
T
> )
T
T
> < (
)
ins j k
del j k
ins j k
del j k
ins
kjT
giá trị ) tương ứng với mỗi bản ghi
CNT del CNT del kjT
del
ins
). ( từ
kjT (
trong tập hợp
Việc thực hiện phép nối chiếm tỉ trọng lớn về mặt chi phí tài nguyên của hệ thống trong thực thi truy vấn. Cải tiến này cho phép giảm đáng kể số lượng các bản ghi kjT ) cần phải thực hiện thuật toán CNGT thông thường – dựa trên việc thực thi phép nối. Qua đó nâng cao hiệu quả thực hiện CNGT các KNT. Tuy nhiên, kjT lớn hơn tích các số lượng bản ghi của các BG còn nếu số lượng các bản ghi của BG
lại, thì cải tiến này có thể sẽ không hiệu quả.
Sau đây, bài viết đề nghị thuật toán CNGT các KNT kiểu SPJ có sử dụng cải tiến
trong cách tính số đếm vừa được trình bày.
3.2. Thuật toán CNGT các KNT kiểu SPJ
Chúng ta xét riêng rẽ ba trường hợp thêm mới, sửa đổi và xoá các bản ghi. Việc sửa đổi một bản ghi có thể xem là tương đương với nhóm hai hành động liên tiếp: xoá một bản ghi và sau đó thêm mới một bản ghi.
kiT , tương ứng với lệnh
kiT được thêm vào BG
ins
3.2.1. Trường hợp thêm mới các bản ghi ins Giả sử tập h ợp các b ản gh i
kiT .
kiT INTO
52
INSERT
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010
Nhìn chung, các thuật toán đã được công bố tập trung tính tập hợp các bản ghi
ins
=
∪
Z
(
F
CNT {
},
)
được thêm mới – tương đương với truy vấn:
ins j
j
C T , j
j
=
T
,...,
T
,...,
T
)
,
TN – số BG.
j
j
T T ( , j 1
j 2
ins j k
TN
với và
jT , ta sử dụng cách tính số đếm cải tiến để
ins
ins
Thay vì thực hiện phép nối các bảng
jZ , kiểm tra sự có mặt của bản ghi
tính CNT . Sau đó, với mỗi bản ghi trong tập
ins
=
+
dạng < jF > trong KNT. Nếu có thì thực hiện truy vấn có dạng:
CNT CNT CNT
jF
UPDATE KNT SET WHERE = < jF >.
Trong trường hợp ngược lại, thực thi truy vấn:
jF ∪ >). {1}
INSERT INTO KNT VALUES (<
del
3.2.2. Trường hợp xoá các bản ghi
kiT , tương ứng với lệnh:
kjT được xoá từ BG
del
Giả sử tập h ợp các bản gh i
kjT .
kjT FROM
DELETE
del
=
∪
Z
(
F
CNT {
},
)
Tính tập hợp các bản ghi được xoá:
del j
j
C T , j
j
=
,...,
,...,
)
T
T
T
,
j
j
( , T T j 1
j 2
del j k
TN
với .
jT , ta sử dụng cách tính số đếm cải tiến để
del
del
Thay vì thực hiện phép nối các bảng
CNT . Sau đó, với mỗi bản ghi từ tập hợp
jZ , kiểm tra sự có mặt của bản chi
tính
del
dạng < jF > trong KNT. Nếu có, thì xét hai trường hợp sau đây:
> CNT CNT
del
=
−
– Nếu đối với bản ghi < jF >, thì thực thi truy vấn có dạng:
> ;
CNT CNT CNT
F i
F= < i
del
<=
UPDATE KNT SET WHERE
CNT
CNT
– Nếu đối với bản ghi < jF >, thì thực thi truy vấn có dạng:
jF = < jF >;
DELETE FROM KNT WHERE
Ngược lại, nếu không có bản ghi dạng < jF > trong KNT, thì không cần thực hiện
hành động nào cả.
old
new
3.2.3. Trường hợp sửa đổi các bản ghi
kiT , tập hợp các bản ghi
kiT được thay đổi thành tập hợp
kiT
Giả sử trong BG ,
tương ứng với truy vấn:
kiT SET
old T i k
new T= i k
53
UPDATE .
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010
new
ins
tương ứng. Trong đó, mỗi và mục 3.2.1 để CNGT KNT, với
T= i k
T i k
del T i k
Dễ nhận thấy rằng, sửa đổi một bản ghi tương đương với xoá bỏ một bản ghi sau đó thêm mới một bản ghi khác. Đối với trường hợp tập hợp, cập nhật một tập hợp các bản ghi tương đương với xoá bỏ một tập hợp bản ghi, sau đó thêm mới một tập hợp bản ghi khác. Suy ra, trong trường hợp này có thể thực thi mục 3.2.2 và tiếp theo sau đó là old T= i k
kiT > tương ứng với một bản ghi < new
kiT
bản ghi < old >.
thoả mãn điều kiện chọn lựa Bởi vì những bản ghi được thêm mới (xoá khỏi) BG có giá trị các trường không jC chắc chắn sẽ không được thêm (xoá) khỏi KNT, nên
kjT > và < del
del
jC (< ins
kjT >)=false, thì loại bỏ bản ghi < del
kjT > từ
ins
jC (< del bản ghi < ins
kjT > từ
đối với mỗi bản ghi < ins
kjT > cần phải kiểm tra hai trường hợp sau đây. Nếu kjT >)=false, thì loại bỏ kjT , nếu kjT . Cải tiến này giảm số lượng các bản ghi cần phải xét thông qua jC và theo đó đơn
việc loại bỏ các bản ghi không thoả mãn một cách rõ ràng điều kiện
giản hoá quá trình thực thi phép nối.
iF (< old
kjT > và < new
kjT
kjT >) =
> thoả mãn điều kiện Nếu các bản ghi có dạng < old
kjT
old
>), thì không cần thực hiện thay đổi nào cả. Vì xoá một bản ghi, sau đó thêm
jF (< new mới một bản ghi hoàn toàn trùng khớp với bản ghi vừa xoá tương đương với việc không thực hiện thay đổi nào cả. Ta có thể loại bỏ cặp < old
kjT
new
> này khỏi và
kjT
kjT > và < new kjT
kjT kjT > và < new
del
ins
. Ngược lại, cần phải giữ lại các bản ghi có dạng < old > thoả mãn điều
jF (< old
jF (< new
kjT và
kjT >) #
kjT
kjT
kiện >). Kết quả của quá trình đó là tập hợp tối
thiểu.
del
ins
kjT bị xoá từ BG và tập hợp các bản ghi
kjT được thêm mới vào BG tương ứng.
old
new
Và bây giờ có thể thực thi các trường hợp 3.2.2 và 3.2.1 cho tập hợp các bản ghi
kjT
kjT
ins
del
ins
del
Ta cũng có thể thay thế việc giản lược bằng cách sau. Khi đã tính và
jZ và
jZ >, thì
jZ , so sánh ins
jZ và del
ins
ins
del
ins
del
=
−
jZ > = < ins −
jZ theo từng bản ghi. Nếu < del
CNT
del CNT và
CNT
ins
del
ins
CNT del
CNT CNT . Tương ứng,
CNT = 0 khi
CNT CNT <
CNT > del CNT = 0 và
CNT .
= CNT ins CNT =
S
khi khi
lựa chọn Không thể sử dụng thuật toán này các KNT được tạo trên cơ sở các truy vấn có thống kê, bởi vì đối với các KNT đó, mỗi một bản ghi KNT tương ứng với một tập hợp jT ), trong khi KNT chỉ chứa mỗi bản ghi bao gồm các trường bản ghi từ phép nối JOIN( S jF
jF . Ta không thể đồng thời lưu các các giá trị của các trường chọn lựa jF > tương ứng với nhiều < C
C jF
54
và điều kiện chọn lựa trong một bản ghi, vì mỗi < S jF >.
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010
4. Kết luận
Thông qua nghiên cứu vấn đề, có thể kết luận:
Thuật toán cập nhật gia tăng sử dụng số đếm số lần lặp lại của các bản ghi trong
KNT là hiệu quả nhất đối với các KNT kiểu SPJ.
Bài viết trình bày cải tiến trong cách tính số đếm và đề nghị thuật toán cập nhật gia tăng các KNT kiểu SPJ có sử dụng cách tính số đếm đã được cải tiến. Các cải tiến mang lại hiệu quả cao đặc biệt trong trường hợp số lượng bản ghi trong BG có dữ liệu thay đổi nhỏ hơn nhiều so với tích của số lượng bản ghi của các BG còn lại trong truy vấn. Sự chênh lệch đó càng lớn thì sự cải tiến càng có hiệu quả. Thuật toán được đề nghị tương đối đơn giản so với các thuật toán đã được đề cập để triển khai trong thực tiễn.
TÀI LIỆU THAM KHẢO
[1] Shmueli O. Maintenance of views. SIGMOD record. 1984. – 14. – tr. 240-255.
. http://portal.acm.org/citation.cfm?id=602293
[2] Blakeley A. J, Larson P., Tompa F.W. Efficiently Updating Materialized Views. http://portal.acm.org/citation.cfm? tr. 61-71.
ACM SIGMOD. 1986. – . id=16894.16861
tr. 157-167. [3] Gupta A., Mumick I. S., Subrahmanian V. S. Maintaining Views Incrementally. In citation.cfm? http://portal.acm.org/
. SIGMOD. 1993. – id=170036.170066
[4] Gupta A., Mumick I.S. Maintenance of materialized views: Problems, Techniques http://www.informatik.uni-trier.de/~ley/db/
and Applications. . journals/debu/GuptaM95.html
[5] Gupta D.K., Mumick I.S. Counting solutions to the view maintenance problem. http://www.tempo.att Laboratories. 1992. rep. AT&T Bell
Tech. . .com/~jeannie/dept/pspapers/att-db-92-8.ps.Z
http://msdn.microsoft.com/en-us/library/ms191432 [6] SQL Server 2005 manual.
(SQL.90).aspx . 15/12/2008.
http://download.oracle.com/docs/cd/B28359_01/server. [7] Oracle
. 17/01/2009. 11g manual. 111/b28286/statements_6002.htm
55
[8] Thomas Kyte. Expert one-on-one Oracle. Apress, 2003.