Tải bản đầy đủ (.pdf) (6 trang)

Báo cáo khoa học: "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" ppt

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 (196.32 KB, 6 trang )

TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010

50

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.
ABSTRACT

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.
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]
2.
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 – 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.
KNT kiểu SPJ
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010

51

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
gồm các phép toán thống kê (SUM, COUNT, AVG, MIN, MAX…).


Truy vấn tạo KNT
kiểu SPJ thứ j có thể được biểu diễn như sau:
mv
( , ,)
j j jj
Z Z FCT= =
.
Với
SC
jj j
FF F= ∪
– tập hợp các trường của KNT thứ j;
S
j
F
– tập hợp các trường lựa chọn của truy vấn thứ j;
j
C
– câu điều kiện lựa chọn WHERE;
C
j
F
– tập hợp các trường từ câu điều kiện lựa chọn WHERE
j
C
;
T
{ 1, 2, }
k
jj j

T Tk N= =
– tập hợp các bảng gốc (base tables, BG)
j
Z
được sử dụng
trong .
Ngoài ra, ta sẽ sử dụng một số ký hiệu sau đây:
ins
k
j
T
(
del
k
j
T
) – 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à
tập có thể chứa các phần tử trùng lặp) được thêm vào (xoá từ) BG
k
j
T
;
<
ins
k
j
T
> (<
del
k

j
T
>) – một bản ghi trong tập
ins
k
j
T
(
del
k
j
T
);
ins
()
k
jj
FT<>
(
del
()
k
jj
FT<>
) – bản ghi của KNT tương ứng với bản ghi được
thêm mới (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).
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

52

3.
3.1. Cải tiến cách tính số đếm
Cải tiến thuật toán CNGT KNT kiểu SPJ bằng cách sử dụng số đếm
Đề 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
bản ghi cần phải thêm mới
ins
j
Z
vào (hoặc xoá
del
j
Z từ) KNT trong quá trình CNGT.
Cho mỗi bản ghi <
ins
k
j
T

> trong tập hợp
ins
k
j
T
các bản ghi được thêm vào (tương tự
cho trường hợp xoá, <
del
k
j
T
> và
del
k
j
T
) kiểm tra xem bản ghi
ins
()
k
jj
FT<>
(
del
()
k
jj
FT<>
) 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

trong KNT. Tiếp theo, tính số
ins ins
( ( ))
k
jj
CNT COUNT F T= <>
cho trường hợp thêm mới và
del del
( ( ))
k
jj
CNT COUNT F T= <>
cho trường hợp xoá từ BG
k
j
T
. Nếu hai bản ghi của BG
<
k
j
T
> 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ừ định nghĩa của phép nối JOIN. Theo đó,
ins
mod( ) 0
CNT
CNT
=


del
mod( ) 0
CNT
CNT
=
. Từ đó
suy ra, có thể tăng (giảm) số đếm trong KNT thêm một giá trị bằng
ins
CNT
CNT
(xuống một
giá trị
del
CNT
CNT
) tương ứng với mỗi bản ghi
ins del
()
kk
jj
TT< >< >
và loại bỏ
ins del
()
kk
jj
TT< >< >

từ
ins

k
j
T
(
del
k
j
T
).
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
trong tập hợp
ins
k
j
T
(
del
k
j
T
) 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,
nếu số lượng các bản ghi của BG
k
j
T
lớn hơn tích các số lượng bản ghi của các BG còn
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.
3.2.1. Trường hợp thêm mới các bản ghi
Giả sử tập hợp các bản ghi
ins
k
i
T
được thêm vào BG
k
i
T
, tương ứng với lệnh
INSERT
ins
k
i
T
INTO
k
i
T
.
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010

53


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
được thêm mới – tương đương với truy vấn:
ins ins
( { }, , )
j j jj
Z F CNT C T= ∪
,
với
12
ins
( , , , , , )
kT
N
j jj j j
T TT T T=


T
N
– số BG.
Thay vì thực hiện phép nối các bảng
j
T
, ta sử dụng cách tính số đếm cải tiến để
tính
ins
CNT
. Sau đó, với mỗi bản ghi trong tập
ins
j

Z
, kiểm tra sự có mặt của bản ghi
dạng <
j
F
> trong KNT. Nếu có thì thực hiện truy vấn có dạng:
UPDATE KNT SET
ins
CNT CNT CNT= +
WHERE
j
F

= <
j
F
>.
Trong trường hợp ngược lại, thực thi truy vấn:
INSERT INTO KNT VALUES (<
{1}
j
F ∪
>).
3.2.2. Trường hợp xoá các bản ghi
Giả sử tập hợp các bản ghi
del
k
j
T
được xoá từ BG

k
i
T
, tương ứng với lệnh:
DELETE
del
k
j
T
FROM
k
j
T
.
Tính tập hợp các bản ghi được xoá:
del del
( { }, , )
j j jj
Z F CNT C T= ∪
,
với
12
del
( , , , , , )
kT
N
j jj j j
T TT T T=
.
Thay vì thực hiện phép nối các bảng

j
T
, ta sử dụng cách tính số đếm cải tiến để
tính
del
CNT
. Sau đó, với mỗi bản ghi từ tập hợp
del
j
Z
, kiểm tra sự có mặt của bản chi
dạng <
j
F
> trong KNT. Nếu có, thì xét hai trường hợp sau đây:
– Nếu
del
CNT CNT>
đối với bản ghi <
j
F
>, thì thực thi truy vấn có dạng:
UPDATE KNT SET
del
CNT CNT CNT= −
WHERE
ii
FF=<>
;
– Nếu

del
CNT CNT<=
đối với bản ghi <
j
F
>, thì thực thi truy vấn có dạng:
DELETE FROM KNT WHERE
j
F
= <
j
F
>;
Ngược lại, nếu không có bản ghi dạng <
j
F
> trong KNT, thì không cần thực hiện
hành động nào cả.
3.2.3. Trường hợp sửa đổi các bản ghi
Giả sử trong BG
k
i
T
, tập hợp các bản ghi
old
k
i
T
được thay đổi thành tập hợp
new

k
i
T
,
tương ứng với truy vấn:
UPDATE
k
i
T
SET
old new
kk
ii
TT=
.
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010

54

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à
mục 3.2.1 để CNGT KNT, với
del old
kk
ii
TT
=


ins new
kk
ii
TT=
tương ứng. Trong đó, mỗi
bản ghi <
old
k
i
T
> tương ứng với một bản ghi <
new
k
i
T
>.
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
thoả mãn điều kiện chọn lựa
j
C
chắc chắn sẽ không được thêm (xoá) khỏi KNT, nên
đối với mỗi bản ghi <
ins
k
j
T
> và <
del
k
j

T
> cần phải kiểm tra hai trường hợp sau đây. Nếu
j
C
(<
del
k
j
T
>)=false, thì loại bỏ bản ghi <
del
k
j
T
> từ
del
k
j
T
, nếu
j
C
(<
ins
k
j
T
>)=false, thì loại bỏ
bản ghi <
ins

k
j
T
> từ
ins
k
j
T
. 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
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
j
C
và theo đó đơn
giản hoá quá trình thực thi phép nối.
Nếu các bản ghi có dạng <
old
k
j
T
> và <
new
k
j
T
> thoả mãn điều kiện
i
F
(<
old
k

j
T
>) =
j
F
(<
new
k
j
T
>), thì không cần thực hiện thay đổi nào cả. Vì xoá một bản ghi, sau đó thêm
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
k
j
T
> và <
new
k
j
T
> này khỏi
old
k
j
T


new

k
j
T
. Ngược lại, cần phải giữ lại các bản ghi có dạng <
old
k
j
T
> và <
new
k
j
T
> thoả mãn điều
kiện
j
F
(<
old
k
j
T
>) #
j
F
(<
new
k
j
T

>). Kết quả của quá trình đó là tập hợp
del
k
j
T

ins
k
j
T

tối
thiểu.
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
del
k
j
T
bị xoá từ BG và tập hợp các bản ghi
ins
k
j
T
được thêm mới vào BG tương ứng.
Ta cũng có thể thay thế việc giản lược
old
k
j
T



new
k
j
T
bằng cách sau. Khi đã tính
del
j
Z và
ins
j
Z
, so sánh
del
j
Z

ins
j
Z
theo từng bản ghi. Nếu <
del
j
Z > = <
ins
j
Z
>, thì
ins ins del
CNT CNT CNT= −

khi
ins
CNT
>
del
CNT

del del ins
CNT CNT CNT= −
khi
ins
CNT
<
del
CNT
. Tương ứng,
del
CNT
= 0 và
ins
CNT
= 0 khi
ins
CNT

=

del
CNT
.

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
bản ghi từ phép nối JOIN(
j
T
), trong khi KNT chỉ chứa mỗi bản ghi bao gồm các trường
lựa chọn
S
j
F
. 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
S
j
F

và điều kiện chọn lựa
C
j
F

trong một bản ghi, vì mỗi <
S
j
F
> tương ứng với nhiều <
C
j
F
>.
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(36).2010


55

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.
/>[2] Blakeley A. J, Larson P., Tompa F.W. Efficiently Updating Materialized Views.
ACM SIGMOD. 1986. – tr. 61-71.
.

id=16894.16861
[3] Gupta A., Mumick I. S., Subrahmanian V. S. Maintaining Views Incrementally. In
SIGMOD. 1993. – tr. 157-167.
.
citation.cfm?
id=170036.170066
[4] Gupta A., Mumick I.S. Maintenance of materialized views: Problems, Techniques

and Applications.
.

journals/debu/GuptaM95.html
[5] Gupta D.K., Mumick I.S. Counting solutions to the view maintenance problem.
Tech. rep. AT&T Bell Laboratories. 1992.
.

.com/~jeannie/dept/pspapers/att-db-92-8.ps.Z
[6] SQL Server 2005 manual.
.

(SQL.90).aspx
[7] Oracle 11g manual.
. 15/12/2008.

111/b28286/statements_6002.htm
[8] Thomas Kyte. Expert one-on-one Oracle. Apress, 2003.
. 17/01/2009.


×