Xử lý truy vấn

Một phần của tài liệu Một số vấn đề cơ sở dữ liệu không gian (Trang 84)

3.4.2.1 Vài nét về xử lý truy vấn

Trong các ứng dụng GIS, dữ liệu có dung lượng rất lớn không thể lưu trữ trong bộ nhớ chính. Do đó, đối với các thuật toán, thao tác quan trọng nhất là chuyển đổi trang dữ liệu (page) vào/ra bộ nhớ ngoài (I/O operation - thao tác vào/ra). Quá trình thiết kế thuật toán phải dựa vào tiêu chí tối thiểu hoá số lần truy cập đĩa và độ phức tạp được tính bằng số thao tác này.

Để minh hoạ, xét ví dụ sau: Cần biểu diễn trên màn hình 40 mục dữ liệu. Mỗi trang bộ nhớ chứa 10 mục dữ liệu, bộ nhớ chính quản lý được 3 trang và sử dụng phương pháp LRU (Least Recently Used - phương pháp thay thế các thành phần ít được sử dụng gần nhất). Dữ liệu được phân bố trong các trang như hình 3.20. Mỗi mục dữ liệu được định danh bởi một số nguyên nhỏ hơn hoặc bằng 40. Theo cách thông thường thì cần đọc lần lượt từ mục dữ liệu thứ nhất. Để in ra mục dữ liệu thứ i, cần truy cập trang thứ i mod 10 +1. Nếu mục dữ liệu đầu tiên cần truy cập là 34, thuộc trang thứ 4, sẽ phải giải phóng trang thứ 1. nếu mục tiếp theo là 5, khi đó cần giải phóng trang 2 và thay nó bởi trang 1.

Như vậy, để đọc một mục dữ liệu, cần truy cập một trang, để giải bài toán cần 40 thao tác vào/ra. Nếu không nhất thiết phải in các mục dữ liệu theo thứ tự thì chỉ cần 4 thao tác vào/ra bằng cách đọc tất cả các dữ liệu trên mỗi trang.

1 5 9 13 ... 2 6 10 14 ... 3 7 11 .. 4 8 12 .. Trang 2

Trang 1 Trang 3 Trang 4

Trong trường hợp tối ưu, việc duyệt toàn bộ tất cả các mục dữ liệu không sắp xếp vần số thao tác là 40/10. Một cách tổng quát, nếu N là kích thước dữ liệu và

P là kích thước một trang thì độ phức tạp được biểu diễn bằng một hàm của N/P.

Một quy luật chung cho xử lý truy vấn là thuật toán phải lợi dụng được sự tổ chức của dữ liệu trên đĩa. Một cơ chế xử lý truy vấn cần sắp xếp các phép truy cập đĩa bằng các thao tác vật lý nhằm làm cho số thao tác vào/ra là nhỏ nhất.

Mỗi bộ định giá truy vấn sử dụng một tập các thuật toán vào/ra hiệu quả để:

 Xác định các thao tác đại số của ngôn ngữ truy vấn và  Truy cập hoặc tiền xử lý dữ liệu.

Vấn đề quan trọng là lựa chọn và kết hợp các phép toán khác nhau để xử lý truy vấn phức tạp. Một trong các cách kết hợp đó được gọi là chiến lược xử lý truy vấn (Query Execution Plan - QEP). Một QEP được biểu diễn như là một cây. Một đặc tính cơ bản của các ngôn ngữ truy vấn quan hệ là tồn tại nhiều biểu thức đại số tương đương cho cùng một truy vấn. Hơn nữa, với mỗi biểu thức đại số, tồn tại một vài QEP vì có thể có các cách truy cập dữ liệu và các thuật toán khác nhau cho mỗi thao tác. Một trong những nhiệm vụ của DBMS là lựa chọn trong số các QEP một giải pháp “tốt nhất” tuỳ thuộc vào một số tiêu chí nào đó.

3.4.2.2 Hai thuật toán I/O tối ưu

Trộn/sắp xếp ngoài

Sắp xếp là một thao tác quan trọng trong xử lý truy vấn, được sử dụng trong giai đoạn tiền xử lý. Một thuật toán sắp xếp rất phổ biến là sort/merge join được dùng trong cơ sở dữ liệu quan hệ để kết nối hai quan hệ chưa được sắp xếp.

Phương pháp này trước tiên sắp xếp mỗi quan hệ (độ phức tạp O(n logmn)), sau

đó trộn hai quan hệ với thời gian tuyến tính, vì vậy độ phức tạp của thuật toán là

O(n logmn).

Thuật toán sắp xếp dữ liệu trên bộ nhớ ngoài không thể sử dụng cây nhị phân như đối với bộ nhớ chính. Tại một thời điểm, mỗi nút của cây sẽ thao tác dữ liệu trong nhiều phần của các trang khác nhau chứ không phải chỉ là một bản ghi.

Trong giai đoạn thứ nhất, các nhóm dữ liệu được sắp xếp (các run) từ dữ

liệu nguồn. Mỗi run chiếm m trang và lưu trữ một tập con được sắp xếp của đầu vào. Việc tạo ra các run lặp lại quy trình sau:

 m trang đệm trong bộ nhớ chính được điền bởi các bản ghi từ dữ liệu nguồn.

 Các bản ghi trong m trang được sắp xếp với một thuật toán trên bộ nhớ bộ nhớ chính (thường là quicksort).

Tiếp theo là giai đoạn trộn, một phần của m khối trong bộ nhớ chính được dành cho các nhóm dữ liệu đầu vào, phần còn lại được sử dụng lưu giữ kết quả trộn. Lựa chọn đơn giản nhất là sử dụng một khối trong bộ nhớ chính cho mỗi file: khi m-1 nhóm được trộn, dùng m-1 khối; khối cuối cùng dành cho nhóm đầu ra. Số các nhóm được trộn tại cùng thời điểm gọi là fan-in.

Quá trình trên được minh hoạ trong hình 3.21. Giai đoạn trộn được biểu diễn bằng một cây mà mỗi nút của nó tương ứng với một thao tác trộn. Một điểm chú ý rất quan trọng trong mô hình này là đầu ra của mỗi nút (một thao tác trộn) lại là một đầu vào cho cho thao tác trộn mức cao hơn. Tại mỗi mức, cần đúng 2n thao tác vào/ra, nếu fan-in là m-1, sẽ có O(logm n) mức trong cây và thuật toán là

tối ưu với độ phức tạp là O(n logm n).

Distribution sweeping

Kỹ thuật này là sự kế thừa thuật toán plane-sweeping kết hợp các đặc

điểm của việc quản lý vào/ra. Nó đặc biệt hiệu quả đối với một bài toán con là

i1 i2 im-1 . ... . ... . ... i1 i2 im-1 o

Các nhóm dữ liệu ban đầu (adsbygoogle = window.adsbygoogle || []).push({});

Fan-in

Các nhóm đầu vào Nhóm đầu ra o

. ...

Dữ liệu đầu ra được sắp xếp

kết nối không gian (spatial join) khi cần xác định giao điểm của từng cặp phần tử thuộc hai tập các hình chữ nhật có số lượng rất lớn.

Liên quan đến kỹ thuật này, trong trường hợp đơn giản, là bài toán xác định các giao điểm của từng cặp các đoạn thẳng thuộc hai tập, song song hoặc vuông góc với nhau. Bài toán thứ hai, xác định giao của các hình chữ nhật thuộc hai tập (bài toán xanh-đỏ).

3.4.2.3 Kết nối không gian

Kết nối không gian giữa hai quan hệ R1R2 xây dựng cặp các bộ từ R1

và R2 thoả mãn một vị từ không gian. Có một vài kiểu điều kiện không gian, như

overlap, contain, topological, distance hay directional... Xét riêng với các kết

nối chồng nhau (overlap). Giả sử rằng, mỗi thuộc tính không gian có một cặp giá trị (mbr, biểu diễn đối tượng không gian), mbr là hình chữ nhật nhỏ nhất bao đối tượng, được sử dụng để xấp xỉ cho các đối tượng hình học, nó cho phép thực hiện nhanh quá trình tiền xử lý nhằm loại bỏ các cặp không thoả mãn điều kiện kết nối.

Phương pháp tính toán kết nối không gian gồm hai bước:

 Bước lọc: các bộ có mbr giao nhau được chọn đưa vào tập sẽ được xét

tiếp.

 Bước làm tinh: với mỗi cặp trong tập được xét tiếp, kiểm tra điều kiện trên biểu diễn hình học của chúng.

Để kiểm tra xem các mbr của một cặp có thoả mãn điều kiện không gian,

có thể sử dụng nhiều thuật toán dựa vào phương pháp truy cập không gian được mỗi quan hệ hỗ trợ. Xét các trường hợp sau:

Các cấu trúc tuyến tính: sử dụng thuật toán với giả thiết mỗi quan hệ được

lập chỉ mục với một cấu trúc tuyến tính, đặc biệt với các cây sắp xếp theo độ cao, z-ordering tree.

R-tree: là phương pháp sử dụng hai R-tree và duyệt đồng bộ, kiểm tra độ

sâu đối với cả hai cây.

Chỉ số đơn: Khi chỉ có một quan hệ được lập chỉ mục, cách đơn giản nhất

là sử dụng vòng lặp chỉ mục. Phương pháp này quét trong quan hệ không được lập chỉ số, với mỗi bộ r, truyền tới quan hệ kia một truy vấn cửa sổ

với tham số r.mbr.

Không chỉ số: Nếu không có quan hệ nào lập chỉ mục, phân các bộ trong

mỗi quan hệ thành từng nhóm nhỏ, sử dụng thuật toán băm tạo thành chiến lược kết nối-băm quan hệ.

Kết nối không gian z-ordering

Thuật toán này giả thiết rằng mỗi quan hệ là sắp xếp theo z và có một cây theo thứ tự với khoá là giá trị z. Các quan hệ có thể chia sẻ cùng không gian.

Điều này đảm bảo rằng việc mã hoá thích hợp các góc phần tư dùng xấp xỉ đối tượng. Bước lọc sẽ xác định các cặp được tiếp tục xử lý trong bước làm tinh. Các cặp này phải thoả mãn cặp chỉ số hoặc giống nhau hoặc cùng trong quan hệ bao hàm. Khi đó, các đối tượng không gian tương ứng có thể chồng nhau. Các lá của cây z-ordering được quét theo một danh sách L, danh sách này có các đầu vào là

cặp (z, oid), được sắp theo z, oid là chỉ số đối tượng xấp xỉ bao ô có giá trị khoá (adsbygoogle = window.adsbygoogle || []).push({});

z. Một ô với khoá z nằm bên trong (hay trùng) với ô có khoá z’ nếu z’ là một đầu

Thuật toán kết nối được phác hoạ như sau. Các danh sách L1, L2 của hai quan hệ được trộn lại. Một cặp giá trị với các (hai) mục vào từ hai danh sách được giữ lại cho bước làm tinh nếu một khoá là đầu vào cho khoá kia.

Kết nối hai R-tree

Thực hiện bước lọc với thuật toán STT cho kết nối không gian R x S khi cả hai quan hệ đều được lập chỉ mục với một R-tree hay R*tree hoặc một biến

thể nào đó. Thuật toán này tối thiểu hoá các thao tác vào/ra và các xử lý của CPU.

Biến thể đơn giản nhất của thuật toán sử dụng phương pháp duyệt theo chiều sâu trên cả hai R-tree. Bắt từ từ hai gốc, so sánh nút N1 của một cây với nút

N2 của cây kia. Tính tất cả các cặp (e1, e2) chồng nhau, với e1N1 và e2N2, gọi đệ quy thủ tục cho các cây con có gốc tại e1, e2 cho đến khi gặp lá.

Thuật toán STT (Node N1, Node N2): tập các cặp id

begin

result = // tập các cặp id, khởi tạo bằng rỗng

for each e1 in N1 for each e2 in N2 mà (e1.mbr  e2.mbr) do if(duyệt đến lá) result += |(e1 . e2)| else N1 = ReadPage(e1.pageId); N2 = ReadPage(e2.pageId); result += STT(N1, N2) end if end for end for returnresult end

Thuật toán trên, tồn tại điểm yếu là vòng lặp được thực hiện với tất cả các nút mặc dù trong nhiều trường hợp có thể biết chắc chắn một số nút chồng lên nút nào của cây kia. Sử dụng kỹ thuật đường thẳng quét sẽ khắc phục được nhược điểm này.

Khi đường thẳng quét đến vị trí l1, nó gặp hình chữ nhật màu đỏ r. Chỉ cần quan tâm đến các hình chữ nhật b màu xanh có khả năng giao với r, vậy chúng

có thể là b1, b2, b3, b4 (danh sách này dừng ở b4b4.mmin > r.xmax). Xác định giao của các đối tượng này với r.

STTsweep(Node N1, Node N2): tập các cặp id

begin

result =  // tập các cặp id, khởi tạo bằng rỗng

pos1 = 1, pos2 = 1 // vị trí hiện tại trong N1, N2

Sắp xếp N1, N2 theo các mbr, tăng dần theo x

while (pos1≤ |N1| and pos2≤ |N2|)

begin

if (N1[ pos1].mbr.xmin≤ N2[ pos2].mbr.xmin) then

b1 b2 b3 b4 l1 l2 r

Hình 3.22. Thuật toán quét mặt phẳng đơn giản nhằm phát hiện giao của các hình chữ nhật

begin

e = N1[ pos1]; p = pos2; e = N2[p]

while (e.mbr.xmin e.mbr.xmax)

begin

if (e.mbb ∩ e.mbr ≠ ỉ) thenresult += {(e.oid, e.oid)} p = p +1; e = N2[p]

end (adsbygoogle = window.adsbygoogle || []).push({});

pos1 = pos1 + 1

end else

// Làm như trên nhưng đảo vai trò các mục dữ liệu của N1, N2

// ....

end if end

returnresult

end

Kết nối băm không gian

Đây là một ứng dụng của thuật toán kết nối-băm cho dữ liệu không gian, được sử dụng thay cho thuật toán vừa trình bày trên.

Thuật toán quan hệ băm-kết nối. Giả sử rằng R là quan hệ nhỏ nhất, thích hợp trong bộ nhớ trong. Một phép quét đơn giản trên một quan hệ S lớn hơn, mỗi bộ t của S được kiểm tra với bảng băm. áp dụng hàm băm f cho t và tìm kiếm giá trị hàm f(t) cho các bộ trong R thoả mãn t.

Phương pháp này đặc biệt hiệu quả chỉ cần một trong hai đầu vào có kích thước nhỏ. Nếu sử dụng cùng một hàm băm cho R và S, các nhóm dữ liệu trong R và S sẽ có quan hệ một-một. Để tránh dư thừa dữ liệu khi một đối tượng xuất

hiện trong một vài phân hoạch, các phân hoạch được phân chia với kích thước không nhất thiết giống nhau.

Thuật toán kết nối không gian chồng R x S bao gồm ba bước như mô tả

dưới đây:

Bước 1: phân hoạch khởi tạo. Mỗi đối tượng được gán cho duy nhất một

phân hoạch. Các yêu cầu: (1) số lượng đối tượng trong các phân hoạch là tương đối như nhau, (2) tất cả các phân hoạch đều phải phù hợp với bộ nhớ chính, (3) sự chồng nhau của các phân hoạch là tối thiểu.

Bước 2: tiếp tục phân hoạch. Bất cứ đối tượng nào thuộc S được gán đến

một phân hoạch khởi tạo trong R nếu đối tượng này chồng lên bao ngoài

của phân hoạch.

Bước 3: giai đoạn kết nối. Sau hai bước trên, chúng ta có hai tập phân

hoạch mà các phân hoạch tương ứng trong hai tập có cùng biên ngoài. Mỗi phân hoạch BS từ quan hệ R được kết nối với một phân hoạch BS từ quan hệ S. Trong mỗi cặp như vậy, cần có ít nhất một phân hoạch (giả sử là RS) phù hợp các bộ nhớ chính. Nó cho phép thực hiện kết nối bởi một phép duyệt quét đơn giản: với từng đối tượng của RS, kiểm tra tất cả các đối tượng của BS. Nếu sử dụng các R-tree cùng với thuật toán đường thẳng

quét và một cấu trúc được trong thì tốc độ thực hiện sẽ tốt hơn rất nhiều.

3.4.2.4 Các kết nối phức tạp

Các kế hoạch thực hiện truy vấn

Khi một truy vấn được thực hiện trong cơ sở dữ liệu, nó được truyền vào trong một chương trình truy cập dữ liệu và sau đó, truy vấn được thực hiện. Trình tự điển hình các bước của quá trình này được mô tả trong hình 3.23. Trước tiên, truy vấn được dịch sang một biểu thức đại số tương đương qua một bộ phân tích

cú pháp (parser). Biểu thức này là tập các phép toán logic. Bộ kiểm tra kiểu xác định sự tồn tại và phù hợp của các tên quan hệ, tên thuộc tính, các kiểu thuộc tính trong các lược đồ. Sau đó, biểu thức được xây dựng thành một cây mà mỗi nút của nó là một phép toán logic. Bước tiếp theo là tối ưu truy vấn theo các luật được viết lại và truy cập lựa chọn đường dẫn. Cuối cùng, bộ xử lý truy vấn chỉ còn thực hiện các toán tử vật lý và các đường truy cập (chỉ số và các bảng băm). Quá trình trên được gọi là chiến lược xử lý truy vấn (Query Execution Plan -

QEP).

Một QEP thường được biểu diễn như một cây nhị phân các phép toán và trình tự cần thực hiện để đạt được truy vấn. Các phép toán tại các lá được thực hiện trước tiên. Cạnh nối một nút và cha của nó trong cây biểu diễn luồng dữ liệu giữa hai thao tác.

Các kết nối đa đường

Quá trình lượng giá một QEP bao gồm một chuỗi các kết nối không gian phát sinh một số vấn đề. Các kết nối kiểu R1 x R1 ...x Rn được gọi là kết nối không gian đa đường. Để đơn giản, xét trường hợp kết nối 2 đường R1xR2xR3 và (adsbygoogle = window.adsbygoogle || []).push({});

User

query đại số Cây QEP

Bộ lọc Các quy tắc dịch

ngữ pháp

Bộ kiểm tra kiểu Thông tin về

các lược đồ

Bộ tối ưu Viết lại quy tắc Chọn đường dẫn truy cập Bộ x.lý truy vấn Các toán tử vật lý Các đường dẫn truy cập Phân tích cú pháp Phân tích ngữ nghĩa Lượng giá

Hình 3.23.Lượng giá các truy

Một phần của tài liệu Một số vấn đề cơ sở dữ liệu không gian (Trang 84)