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

Tìm câu SQL từ chương nguồn, chuyển sang AQL và vẽ cây toán tử

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 (262.23 KB, 9 trang )

TÌM CÂU SQL TỪ CHƯƠNG NGUỒN,
CHUYỂN SANG AQL VÀ VẼ CÂYTOÁN TỬ
Lê Huy Thập
1

Nguyễn Hữu Sỹ
2


Bài báo chỉ ra phương pháp tìm kiếm câu truy vấn dạng SQL
(Structured Query Language) trong chương trình nguồn. Từ câu SQL đã tìm
được bằng phương pháp tìm kiếm xâu [13], [14] chúng ta tách ra: các quan
hệ cơ sở, các phép toán quan hệ…. Chuyển các phép toán quan hệ sang các
phép toán đại số quan hệ. Xây dựng cây SQL và/hoặc AQL (Algebraic
Query Language) nhằm hỗ trợ cho các thuật toán tối ưu câu vấn tin trong
CSDL phân tán và song song.

1. Mở đầu
Thực hiện câu vấn tin tối ưu sẽ nâng cao hiệu năng trong quá trình xử lý vấn tin. Một
số phương pháp tối ưu hóa được dùng trực tiếp ngay trên câu SQL hay trên câu AQL, nhưng
tất cả đều mang tính chất phương pháp luận, đó là tối ưu động Ingres hay Ingres – QOA…
Tuy nhiên, vấn đề khó khăn lại nằm ở chỗ các câu vấn tin SQL cụ thể có tồn tại trong
chương trình nguồn hay không? Nếu có thì nằm ở vị trí nào? Hình dáng câu vấn tin này ra
sao? Và cuối cùng là làm thế nào để chuyển nó sang câu vấn tin dạng AQL. Trong phạm vi
bài báo này, chúng ta sẽ trình bày phương pháp tìm kiếm “kiểu vét cạn” chương trình nguồn
dạng tuần tự để tìm ra các câu SQL, chuyển nó sang AQL, xây dựng cây toán tử để hỗ trợ cho
các phương pháp để tối ưu câu vấn tin AQL tức là câu vấn tin SQL đã tìm được.
2. Nội dung
2.1. Giới thiệu một số phương pháp tối ưu hóa câu vấn tin
Thuật toán INGRES
Câu vấn tin q có n quan hệ, INGRES phân rã p thành q


l
 q
2
 …  q
m
. Phân rã này
sử dụng hai kỹ thuật cơ bản: Tách và Thế bộ [1], [6].
Thuật toán INGRES phân tán
Cách tối ưu hóa của INGRES phân tán [1], [6] được dẫn xuất từ thuật toán được dùng
trong hệ INGRES tập trung. Vì thế nó thực hiện tối ưu hóa động cho chiến lược xử lý câu vấn
tin đã cho. Hàm mục tiêu của thuật toán là làm giảm tối đa chi phi tổ hợp của thời gian truyền
tin và thời gian đáp ứng. Thuật toán này có tên gọi D-INGRES-QOA.
Thuật toán System R

1
PGS. TS, trường ĐH Công nghiệp Hà Nội
2
ThS, trường CĐSP Vĩnh Phúc
Thuật toán System R [1], [6] thực hiện tối ưu hóa tĩnh bằng cách tìm kiếm vét cạn
không gian các phương án. Đầu vào của System R là cây toán tử do phân rã câu vấn tin SQL.
Đầu ra là phương án thực hiện để cài đặt cây toán tử tối ưu.
Thuật toán System R*
Thuật toán tối ưu hóa vấn tin phân tán System R* [1], [6] là một mở rộng về chất của
những kỹ thuật đã phát triển cho tối ưu hóa của System R. Vì thế nó sử dụng phương pháp
tiếp cận biên dịch, trong đó nó thực hiện một tìm kiếm vét cạn tất cả các chiến lược có thể có
nhằm chọn ra chiến lược có chi phí nhỏ nhất. Thuật toán này được mô tả qua thủ tục R*-
QOA.
Thuật toán SDD-1
Thuật toán tối ưu hóa của SDD-1 [1], [6] có tên là thuật toán leo đồi, được xem là thuật
toán xử lý vấn tin phân tán đầu tiên. Trong thuật toán này, chúng ta tinh chỉnh một giải pháp

khả thi ban đầu và lặp đi lặp lại cho đến khi không còn cải thiện được chi phí của nó nữa.
Thuật toán có tên SDD_1_QOA.
2.2. Câu vấn tin SQL, AQL và cây toán tử
Câu vấn tin dạng SQL có cấu trúc SELECT FROM WHERE
Vì tất cả các câu mệnh logic đề đều có thể chuyển về dạng chuẩn hội, nên chúng ta chỉ
xét các mệnh đề (điều kiện) sau WHERE là các mệnh đề chuẩn hội.
Câu vấn tin dạng AQL là kết quả của phép chuyển đổi các phép toán trong SQL sang
phép toán của đại số quan hệ (, , , , , …). Một SQL sẽ có nhiều AQL tương ứng.
Việc chọn lựa AQL nào để thực hiện là dựa vào khả năng tối ưu hóa AQL, nghĩa là tìm trong
tập {AQL} một AQL* để khi thực hiện theo chiến lược này sẽ có chi phí bé nhất, hoặc có lợi
nhất…
Cây toán tử là việc thể hiện của các câu SQL hoặc AQL bằng cây.
Cách biến đổi câu vấn tin phép tính quan hệ trở thành một cây toán tử như sau:
i. Trước hết tạo ra các nút lá là các quan hệ trong SQL các nút lá nằm sau FROM.
ii. Nút gốc được tạo ra như phép chiếu chứa các thuộc tính kết quả, các thuộc tính này
nằm sau SELECT.
iii. Lượng tử hoá (vị từ sau WHERE ) được chuyển thành các phép tính quan hệ thích
hợp. Câu vấn tin được thực hiện từ các nút lá đến gốc. Chuỗi này có thể được cho trực tiếp
qua thứ tự xuất hiện của các toán tử.
Ghi chú:
i. Các điều kiện sau WHERE – chính là các biểu thức logic – các biểu thức logic luôn
luôn tương đương với một biểu thức chuẩn hội [4], [6], [7], [11]. Do đó từ đây về sau, khi
không nói gì thêm thì điều kiện sau WHERE, chúng ta xem là biểu thức chuẩn hội.
ii. Một cây toán tử dạng quan hệ sẽ tương ứng với nhiều cây toán tử dạng đại số quan
hệ [4], [5], [6], [8], [10].
2.3. Thuật toán tìm câu vấn tin SQL, tạo câu vấn tin AQL và cây toán tử
2.3.1. Thuật toán tìm câu vấn tin SQL - TimKiem_SQL
Thuật toán này tìm kiếm và vét cạn tất cả các câu vấn tin dạng SQL trong chương trình
nguồn và đưa vào hàng đợi chờ xử lí. Thuật toán như sau:
TimKiem_SQL

Vào: Chương trình nguồn
Ra: Các câu truy vấn SQL
/*Nội dung thuật toán*/
While NOT EOF
If <  SQL> /*Nếu còn tồn tại câu SQL*/
Push SQL Into QueueSQL /*Đưa SQL đó vào hàng đợi QueueSQL*/
End If
Continue /*Ngược lại, chuyển xuống đoạn sau */
End While
Bổ đề 1
Thuật toán có điểm dừng tại cuối tệp và có độ phức tạp O(n).
Thật vậy, điểm dừng chính là điểm mà tại đó EOF = True. Gọi n là số hàng của tệp
chương trình nguồn. Từ cấu trúc While NOT EOF… Continue End While, sẽ cho chúng ta
kết luận về độ phức tạp O(n)
2.3.2. Thuật toán chuyển SQL sang AQL: CH_SQL_AQL
Thuật toán lấy các câu SQL đã được lưu trữ trong hàng đợi QueueSQL, chuyển đổi các
kí hiệu và phép toán trong quan hệ sang đại số quan hệ sau đó lưu vào hàng đợi QueueAQL.
CH_SQL_AQL
Vào: Hàng đợi SQL
Ra: Hàng đợi QueueAQL các kí hiệu câu truy vấn AQL
/*Nội dung thuật toán*/
While QueueSQL   /*Với hàng đợi QueueSQL  */
Pop QueueSQL Save Into Tam.txt /*Lấy SQL từ QueueSQL và ghi vào tệp
Tam.tex*/
Do while NOT EOF()
Push 
(các thuộc tính sau SELECT)
Into QueueAQL
Repeat
Find <Phép chọn>

If <Nếu phép chọn sẽ có dạng <Tên Quan hệ>.<Tên trường><Phép toán quan hệ>
<Value>>
Push 
<Tên trường> <Phép toán đại số quan hệ> <Value>
Into QueueAQL
End if
If <Nếu phép chọn sẽ có dạng <Tên Quan hệ>.<Tên trường> <Phép toán quan hệ>
<Biểu thức mệnh đề quan hệ>>
Trong biểu thức mệnh đề thay “AND” bởi “

” còn “OR” bởi “

” để được<Biểu
thức mệnh đề đại số quan hệ >
Push 
<Tên trường><Phép toán đại số quan hệ> <Biểu thức mệnh đề đại số quan hệ>>
Into QueueAQL
End if
Until <Không còn phép chọn>
Repeat
Find <Phép nối>
//Phép nối sau WHERE là các dòng lệnh hoặc phần câu lệnh có dạng
// <Tên Quan hệ 1>.<Tên Khóa> <Phép toán quan hệ>
// <Tên Quan hệ 2>.<Tên Khóa 2>.
Replace <Tên Quan hệ 1>.<Tên Khóa1> <Phép toán quan hệ> <Tên Quan hệ
2>.<Tên Khóa 2> By <Tên Quan hệ 1>
<Tên Khóa1><Phép toán đại số quan hệ>.<Tên Khóa2>
<Tên
Quan hệ 2>
If <<Tên Quan hệ 1> AND <Tên Quan hệ 2> không có ở bước trước>

Push <Kết quả>

Into QueueAQL
Else
If <Tên Quan hệ 1> có ở bước trước>
Pop &
<Phép toán đại số quan hệ>.<Tên Khóa2>
<Tên Quan hệ 2>
Push <Kết quả> Into QueueAQL
Else
<Tên Quan hệ 1>
<Tên Khóa1><Phép toán đại số quan hệ>
& Pop &
<Phép toán đại số quan hệ>.<Tên
Khóa2
><Tên Quan hệ 2>
Push <Kết quả> Into QueueAQL
End if
End if
Until <Không còn phép nối>
Push <Kí hiệu hết lệnh AQL >
End While
Chú ý rằng tập các phép toán quan hệ gồm {=, < , <= , > , >= , NOT, AND, OR} tương
ứng với phép toán đại số quan hệ {=, < ,  , > ,  ,  ,  , }.
Bổ đề 2
Thuật toán sau một số bước hữu hạn.
Thật vậy, gọi
n là số SQL trong QueueSQL,
m là số phép toán nối, chọn,…
Thì độ phức tạp của thuật toán là O(nm)

2.3.3. Thuật toán tạo ra câu lệnh AQL - TaoAQL
Thuật toán được dùng để thể hiện câu truy vấn AQL
TaoAQL
Vào: QueueAQL
Ra: Các câu vấn tin dạng AQL trong hàng đợi QueueVT_AQL
/*Nội dung thuật toán*/
While QueueAQL  




Str = ““
Count = 0
Repeat
Str = Str & “(“ & Pop
Count = Count +1
Until <Kí hiệu hết lệnh AQL >
For i = 1 To Count
Str = Str & “)“
End for
Push <Kết quả> Into QueueVT_AQL
End While
Bổ đề 3
Thuật toán sau một số bước hữu hạn.
Thật vậy, gọi
n là số AQL trong QueueAQL,
m là số xâu cực đại trong tất cả các AQL
Thì độ phức tạp của thuật toán là O(nm)
2.3.4. Thuật toán vẽ cây toán tử: VeCayToanTu
Thuật toán được dùng để vẽ cây toán tử đã có trong QueueVT_AQL như sau

VeCayToanTu
Vào: QueueVT_AQL
Ra: Cây toán tử
Output (“Cần vẽ cây toán tử thứ k = “)
/*Nội dung thuật toán*/
Input k
While (1)
For i = 1 To k -1
If QueueVT_AQL  
Pop
Else
Exit While
End if
End for
Pop Into StrXau // Lấy câu AQL thứ k ra khỏi hàng đợi và cho vào biến StrXau
StrXau = Right(StrXau, length (strXau) - 1
l = length (strXau)
For i = 0 To l
If strXau(i) = “(“
XauVe = Left(StrXau, i)
Vẽ một điểm và gắn nhãn XauVe
StrXau = Right(StrXau, l – i)
l = length (strXau)
Exit While
End While
Bổ đề 4
Thuật toán sau một số bước hữu hạn.
Thật vậy, gọi
m là số xâu có nhiều trong tất cả các AQL của VT_AQL
Thì độ phức tạp của thuật toán là O(km)

Định lí: Tất cả các thuật toán đã được trình bày trong mục 2.3 đều dừng sau một số
hữu hạn bước.
Chứng minh: Kết luận được suy ra từ các bổ đề 1, 2, 3, 4.
2.3.5. Ví dụ
Cho CSDL gồm các quan hệ
NV(MaNV, TenNV, CN)
DuAn(MaDA, TenDA, NS)
BL(CN, Luong)
PN(MaNV, MaDA, TG, CV)
Trong đó:
NV – Nhân viên: MaNV – Mã nhân viên, TenNV – Tên nhân viên, CN – Chuyên ngành.
DuAn – Dự án: MaDA – Mã dự án, TenDA – Tên dự án, NS – Ngân sách.
BL – Bảng lương: CN – Chuyên ngành, Luong – lương.
PN – Phân nhiệm: MaNV – Mã nhân viên, MaDA – Mã dự án, TG – thời gian làm việc,
CV -chức vụ.
Giả sử trong tệp chương trình nguồn có lệnh SQL:
Nghĩa là: Tìm tên các nhân viên, trừ Lê Hồng Ngọc đã làm cho dự án “Cầu Long Biên” trong
12 tháng hoặc 24 tháng.
a. Sau khi áp dụng thuật toán TimKiem_SQL, hàng đợi QueueSQL sẽ có nội dung sau:
SELECT TenNV FROM NV , DuAn , PN WHERE PN.MaNV = NV.MaNV AND
PN.MaDA = DuAn.MaDA AND TenNV <> “Lê Hòng Ngọc” AND TenDA = “Cầu Long
Biên” AND (TG=12 OR TG=24).
b. Sau khi áp dụng thuật toán CH_SQL_AQL chúng ta nhận được trong tệp Tam.txt
chuỗi sau đây:
“SELECT TenNV FROM NV, DuAn, PN WHERE PN.MaNV = NV.MaNV AND
PN.MaDA = DuAn.MaDA AND TenNV <> “Lê Hòng Ngọc” AND TenDA = “Cầu Long
Biên” AND (TG=12 OR TG=24)”.
a. Tiếp tục áp dụng thuật toán này chúng ta được câu lệnh AQL là:

TenNV

(
TG=12  TG=24
(
TenDA = ”Cầu Long Biên”
(
TenNV  ”Lê Hồng Ngọc ”

b.

Áp dụng thuật toán VeCayToanTu, chúng ta được cây toán tử như hình (2-1).
(DA
MaDA
(PN
MaNV
NV)))))


TenNV  ”Lê Hồng Ngọc ”

TenDA = ”Cầu Long Biên”

TG=12  TG=24
Hình 2–1. Ví dụ về cây toán tử

TenNV

Chọn
Nối
Chiếu
MaDA


DA


PN

NV

MaNV


















3. Kết luận
Trong các tài liệu nghiên cứu và ứng dụng các lệnh SQLs, AQLs, OTs ((Operational
Trees) cây toán tử) thường được chỉ ra trước. Từ đó bằng phương pháp tối ưu hóa thủ công,

thậm chí có thể tự động tối ưu hóa bằng các thuậtt toán đã cho tại mục 2.1. Nhưng việc tìm
kiếm thủ công trong chương trình nguồn, viết lại câu vấn tin SQL, tạo lập cây toán tử sẽ mất
không ít thời gian và cũng không tránh được các sai sót. Phương pháp đã được trình bày
trong bài báo này nhằm khắc phục các nhược điểm trên đồng thời hỗ trợ đắc lực cho hướng
nghiên cứu và ứng dụng thuật toán song song, lập trình song song xử lí song song và phân
tán,…
4. Hướng phát triển
Chuyển các thuật toán mục 2.1, 2.2 sang các thuật toán song song, dùng các ngôn ngữ
lập trình song song để thể hiện chúng và thủ tục hóa (mẫu hóa chương trình) các thuật toán
trên, nhằm nâng cao hiệu quả nghiên cứu, giảng dạy và sử dụng.

TÀI LIỆU THAM KHẢO
1. M.Tamer Özsu, Patrick Valduriez, Nguyên lý các hệ cơ dữ liệu phân tán, Trần Đức
Quang biên dịch, Nxb Thống kê, 1999.
2. Robert Sedgewick, Cẩm nang thuật toán Vol.1 and vol.2, Nxb Khoa học và Kỹ thuật,
2001.
3. Lê Huy Thập, Giáo trình kỹ thuật lập trình, Nxb Khoa học tự nhiên và công nghệ,
Tập 1, 10-2008.
4. Lê Huy Thập, Cơ sở lý thuyết song song, Nxb Thông tin và Truyền thông, 12-2011,
Tái bản lần 1.
5. Lê Huy Thập, Bài giảng về CSDL quan hệ, (Dùng giảng dạy tại Học viện Công nghệ
bưu chính viễn thông), 2010.
6. Lê Huy Thập, Bài giảng về CSDL phân tán, Dùng giảng dạy tại học viện công nghệ
bưu chính viễn thông và Đại học Sư phạm Hà Nội 2, 2007.
7. Lê Huy Thập, Phân mảnh trên giá trị lặp của các thuộc tính trong CSDL quan hệ,
Tạp chí Tin học và Điều khiển tối ưu, tập 23, số 1, tr. 86-98, 2007.
8. Lê Huy Thập, Giải các bài toán trên cây toán tử đường ống bằng ma trận đặc trưng,
Tạp chí Tin học và Điều khiển học, tập 27, số 2, tr. 107-118, 2011.
9. Lê Huy Thập, Nghiên cứu xác định các dạng báo cáo tổng hợp linh hoạt, Tạp chí Tin
học và Điều khiển học, tập 25, số 2, tr. 188-200, 2009.

10. Lê Huy Thập, Bảng câu vấn tin trên các quan hệ và xử lý câu vấn tin trên bảng , Kỷ
yếu hội thảo Quốc gia lần 13, Hưng Yên năm 2010, tr. 29-40, Nxb Khoa học và Kỹ
thuật, 2011.
11. Lê Huy Thập, Báo cáo động và các mệnh đề lọc dữ liệu, Kỷ yếu hội thảo Quốc gia
Biên Hòa, năm 2009, tr. 19-36, Nxb Khoa học và Kỹ thuật, 2010.
12. Lê Huy Thập, Loại bỏ các mẩu tin nhân bản thừa trong cơ sở dữ liệu quan hệ, Kỷ
yếu hội thảo Quốc gia Đại Lải, năm 2007, tr. 219-227, Nxb Khoa học và Kỹ thuật,
2008.
13. Lê Huy Thập, Chuẩn hoá và xác định mối quan hệ giữa các cụm từ, tìm các thông tin
liên quan đến cụm từ, Kỷ yếu hội thảo Quốc gia Huế, năm 2007, tr. 57-58, Nxb Khoa
học và Kỹ thuật, 2008.
14. Lê Huy Thập, Tìm thông tin trên các máy tính bằng cách dùng các chuỗi để so sánh,
Kỷ yếu hội nghị KH kỷ niệm 30 năm thành lập Viện CNTT, tr. 422-427, Nxb Khoa
học Tự nhiên và Công nghệ.

SEARCH QUERIES SQL FROM ORDER PROGRAM,
TRANSFER TO AQL AND OPERATIONAL TREES
Le Huy Thap, Nguyen Huu Sy

Abstract
The paper points out search method queries as SQL (Structured Query Language) in
the sequential source program. From the found SQL statements we separate: the base relations,
relational operations… Transfer the relational operations to the relational algebraic operrations.
Construction AQL (algebraic Query Language) to support the optimization
algorithms of queries in the distributed database.

×