Kỹ thuật xử lý truy vấn lồng nhau

Một phần của tài liệu Truy vấn cơ sở dữ liệu hướng đối tượng sử dụng biểu thức đường dẫn (Trang 50)

3.3.1. Mô hình hệ thống

Trước khi giới thiệu các phương pháp đồ thị truy vấn, mô tả mô hình của bộ xử lý truy vấn của hệ thống củ trong hình 3.2, biểu thức truy vấn phân tích cú pháp khai báo là lần đầu tiên để hình thành nội bộ mà bao gồm các cây phân tích cú pháp và một số bảng như bảng biến, bảng biểu hiện con đường, bảng lớp ,..., vv. Các hình thức nội bộ này sau đó được dịch sang đồ thị truy vấn bởi đồ thị truy vấn chung. Sơ đồ thực thi chung là quá trình ánh xạ đồ thị truy vấn đến một chuỗi các thao tác toán tử dữ liệu. Cuối cùng, Runtime Database Executor chạy các sơ đồ thực thi tạo ra các kết quả truy vấn.

- 51 -

Hình 3.2 Mô hình hệ thống xử lý truy vấn

3.3.2. Đồ thị truy vấn

Đồ thị truy vấn là một đại diện của các biểu thức truy vấn. Đồ thị truy vấn được phân cấp, phù hợp với đặc tính phân cấp cho các đặc tính lồng nhau của các truy vấn trong OQL.

3.3.2.1. Định nghĩa

Định nghĩa 1. Một đồ thị truy vấn G là một đồ thị trong đó bao gồm các nút N, và Liên kết L. Nó có thể được thể hiện như là G = [N, L].

Định nghĩa 2. Các nút trong N được chia thành ba loại. Bao gồm Simple-Node NS, Collection-Node NC, và Path Node NP .

Định nghĩa 3. Simple-Node NS là nút nguyên thủy mà không thể được chia ra thành các nút khác. Nó được sử dụng để đại diện cho một biến hoặc thuộc tính của nút trung gian trong biểu thức đường dẫn (thuộc tính dây chuyền). Nó bao gồm ba yếu tố: Var, Type, và Filter. Var là tên biến. Type là loại tương ứng của biến. Filter là vị từ ngược lại nút. NS có thể được biểu diễn như là [Var, Type, Filter].

- 52 -

Các loại Simple-Node có thể không được Literal như int, char, float, ...,vv Simple-Node được sử dụng để đại diện cho thuộc tính phức tạp hơn là thuộc tính chữ.Ví dụ, e.Name = "John" có thể được thể hiện như sau:

NS(e) = [e, Employee, Name= "John"],

Định nghĩa 4. Collection-Node NC có thể được chia ra thành một đồ thị truy vấn con Gsub và sau đó các toán tử project(toán tử project là tương tự như trong mô hình quan hệ) được áp dụng cho đồ thị. Các projection-list là danh sách của thuộc tính được projected bởi ProjectO từ đồ thị con Gsub. Một collection node NC được ký hiệu là [Var, Type, Filter] nơi mà TypeProject(Gsub, projection list).

Các kiểu trả về của nút này là bag hoặc tập các đối tượng. Trong hệ thống phân cấp loại chống lại ODMG mô hình,bag và set là các kiểu phụ của các loại cấu trúc đối tượng. Thực hiện nó với persistence class trong quản lý đối tượng để lưu kết quả truy vấn trung gian.

Định nghĩa 5. Các Path Node NP không khai triển được nó được sử dụng để đại diện cho tập các thuộc tính tương ứng với một biến khai báo trong lượng hóa phổ dụng hoặc lượng hóa tồn tại. Một Path Node được ký hiệu là NP =[Var, Path, Filter].

Định nghĩa 6. Các liên kết trong L được chia thành năm loại. Gồm Navigation-Link Ln , Join-Link Lj, All-Link Lall, Exist-Link LextIn-Link Lin.

Định nghĩa 7. Các Navigation-Link Ln là một hướng liên kết nguyên thủy mà không thể phân tách. Nó có ba yếu tố, hai nút được kết nối bởi một liên kết, và tương ứng với một thuộc tính Ln có thể được biểu diễn như là [(N1, N2) , Attrihute] Ln được sử dụng để đại diện cho biểu thức đường dẫn. Ví dụ, e.Workon là một liên kết nguyên thủy nối hai nút Employee và Project. Các biểu thức đường dẫn có thể được xây dựng như sau.

NS(e) = [e, Employee, null],

- 53 -

Ns(p) = [p, Project, null],

Các đại diện đồ họa của Navigation-Link là phác thảo trong hình 3.

Hình 3.3 Ví dụ đại điện đồ họa Navigation-Link

Định nghĩa 8. Các Join-Link Lj là một liên kết vô hướng nguyên thủy. Nó kết nối hai nút bằng cách sử dụng thuộc tính join JoinAttr. Các đối tượng trong hai nút này được join bởi oids của họ hơn là giá trị thuộc tính của họ. Lj có thể được biểu diễn như là [N1, N2, JoinAttr]. Nếu JoinAttr là null, nó có nghĩa là các loại của cả hai nút không phải là loại nguyên thủy. Lj được sử dụng để xác định điều kiện join trong một truy vấn. Ví dụ, điều kiện join trong Q1:e.Supervisor = d.Manager có thể được xây dựng bằng cách sử dụng một chuỗi các simple nodes và navigational links và cuối cùng là join của Lj (xem bên dưới).

NS(e) = [e, Employee, Name= "John"],

Ln(supervisor) = [(Ns(e), Ns(e’)) , Supervisor],

Ns(e) = [e’, Employee, null],

Ns(d) = [d, Department, null],

Ln(manager) = [(Ns(d), Ns(d’)) , Manager],

Ns(d’) = [d’, Employee, null],

Lj(supervisor,manager) = [(Ns(e’), Ns(d’)) , null],

- 54 -

Hình 3.4 Đại điện đồ họa của e.Supervisor = d.Manager

Định nghĩa 9. Các All-Link Lall là một liên kết có hướng và phân tách được. Nó tương đương với một đồ thị truy vấn con Gsub chứa Path-Node trong đó. Cả các nút được nối bởi Lall phải được cùng loại. Lall có thể được biểu diễn như là [(N1, N2),

Gsub], nơi Gsub được xây dựng bởi một Path-Node

Lall được sử dụng để đại diện cho các lượng hóa phổ dụng. Ví dụ, vị từ Q3 trong mệnh đề where là "for all x in e.Workon: x.Contorlled.Location=Taipei". Chúng ta có thể xem nó như là một bộ lọc của biến e bên ngoài có điều kiện lọc là

x.Controlled.Location = "Taipei" . Các vị từ trong mệnh đề where của Q3 có thể

được xây dựng như sau :

NS(e) = [e, Employee, null],

Lall = [(Ns(e), Ns(e’)) , Gsub],

Ns(e’) = [e’, Employee, null],

Gsub = [

Np(x) = [x, e.Workon, null],

Ln(controller) = [(Np(x), Ns(controlled)) , Controlled],

Ns(d) = [d, Department, Location=”Taipei”], ]

- 55 -

Hình 3.5 Đại điện đồ họa của Q3

Định nghĩa 10. Exist-Link Lext là tương tự như của All-Link ngoại trừ các lượng hóa

Exist()

Định nghĩa 11. In-Link Lin là một liên kết trực tiếp và nguyên thủy. In-Link Lin có thể được biểu diễn như là [( N1, N2 )] trong đó N1 và N2 là hai đồ thị truy vấn con. Sau đây minh họa nó bằng cách sử dụng các truy vấn sau đây Q5.

Q5: “Lấy tên của nhân viên có giám sát là một trong những supervisee của người quản lý bộ phận Taipei”.

select e.Name

from e. in Employee, d in Department

where e.supervisor in d.Manager.Supervisee and d.Location = "Taipei"

Các vị từ trong mệnh đề where có thể được xây dựng bằng cách sử dụng các biểu thức sau đây:

Ns(e) = [e, Employee, null],

Ln(supervisor) = [(Ns(e), Ns(supervisor)) , Supervisor],

Ns(e’) = [e’, Employee, null],

Ns(d) = [d, Department, Location=”Taipei”],

Ln(manager) = [(Ns(d), Ns(e’’)) , Manager],

Ns(e’’) = [e’’, Employee, null],

Ln(supervisee) = [(Ns(e’’), Ns(ee)) , Supervisee],

- 56 -

Lin(supervisor, supervisee) = [(Ns(e’), Ns(ee))],

Các đại diện đồ họa của các biểu thức trên được vẽ trong hình 3.6.

Hình 3.6 Đại điện đồ họa của Q4

3.3.2.2. Chuyển đổi đồ thị truy vấn

Trong phần này, sẽ đề xuất một thuật toán để chuyển một biểu thức truy vấn vào một đồ thị truy vấn. Truy vấn được thể hiện trong OQL. Ý tưởng chuyển đổi dựa vào cấu trúc lưu trữ nội bộ, Access Support Relation. Có một bản đồ thể hiện đường dẫn trong một truy vấn đến một cấu trúc lưu trữ ASR. Một biểu thức đường dẫn đến một sự kết hợp của Simple-Nodes và Navigate-Links. Một con đường quyết định thứ tự thực hiện các hướng. Mỗi cấu trúc trong đồ thị truy vấn có thể ánh xạ đến một chuỗi các toán tử Simple-Node ánh xạ vào một trạng thái trung gian của ASRs, Navigate-Link ánh xạ đền toán tử navigate, Join-Link ánh xạ đền toán tử join, điều kiện lọc ánh xạ đến toán tử select, projection list ánh xạ đến toán tử

- 57 -

project. Ưu điểm của thiết kế của này là nó rất dễ dàng để dịch các đồ thị truy vấn để thực thi sơ đồ.

Thuật toán chuyển đổi :

1. Biến non-literal hoặc thuộc tính non-literal trong một biểu thức đường dẫn được chuyển thành một Simple-Node Ns.Tên của nút là giống hệt như của một biến. Nếu không có tên biến, hệ thống sẽ chỉ định một tên duy nhất để nút này tự động.

2. Hai thuộc tính non-literal trong một biểu thức đường dẫn cấu trúc là

Navigation-Link Ln.

3. Điều kiện join trong mệnh đề lượng hóa cấu trúc là Join-Link

4. Kết quả của việc đánh giá các from -where là một bag hoặc một tập các đối tượng. Nó được đại diện bởi một Collection-Node Nc Mệnh đề select sau đó yêu cầu các thuộc tính giá trị projects.

5. Mệnh đề lượng hóa chuyển thành các hình thức phân ly bình thường, nghĩa là, (query and query and ...) hoặc (query and query and ... .) hoặc ...Mỗi biểu thức con trong một cặp dấu ngoặc đơn xây dựng một Collection-Node. Collection- Node này được kết hợp bởi toán tử union và sau đó sản xuất ra một Collection- Node mới.

6. Một mệnh đề có chứa cho tất cả lượng hóa phổ biến thành một All-Link Lall.

7. Một mệnh đề có chứa có định lượng phổ biến thành Exist-Link Lext. 8. Một mệnh đề có chứa lượng hóa được biến đổi thành In-Link Lin

Đồ thị truy vấn QG1 và QG3 có thể được bắt nguồn từ các truy vấn Q1 và

Q3a tương ứng bằng cách áp dụng các thuật toán chuyển đổi ở trên.Các đồ thị truy

- 58 -

Hình 3.7a Đồ thị truy vấn QG1

- 59 - 3.4. Kỹ thuật Access Support Relations (ASRs)

Kỹ thuật Access Support Relations (ASRs) được đề xuất bởi Kemper và Moerkotte. ASRs được giới thiệu như là một phương tiện để tối ưu hóa xử lý truy vấn trong các hệ thống cơ sở dữ liệu hướng đối tượng.

Theo định nghĩa [9]. Một biểu thức đường dẫn có dạng : o.A1...An, trong đó o là một cấu trúc tuple đối tượng có chứa các thuộc tính A, và o.A1...An đề cập đến một đối tượng hoặc một tập các đối tượng. Kết quả của biểu thức đường dẫn là tập hợp các đối tượng (hoặc giá trị) của các loại đó có thể đạt từ o thông qua các chuỗi thuộc tính xác định.

3.4.1. Các toán tử thao tác ASRs

Định nghĩa một tập hợp các toán tử để thao tác ASRs trong việc xử lý truy vấn. Các toán tử được mô tả như dưới đây.

Toán tử I/O

• NewAsr : Đây là toán tử được sử dụng để tạo ra một chuẩn mở rộng mới của ASRs (ký hiệu là ASRcan). Điều này mở rộng kinh điển được khởi tạo bằng cách điền vào mức độ của lớp được chỉ định. Định dạng của toán tử này là

ASRcan = NewAsr(initial class).

• SetAttrToAsr : Toán tử này tạo ra một mở rộng kinh điển ASRcan1để lưu trữ các

oid của oi.A, mà oi là các đối tượng quy định tại ASRcan [S0,...,Si,...,Sn] có thể và A là một tập thuộc tính của oi. Định dạng của toán tử này là

ASRcan1 = SetAttrToASR(ASRcan, oi.A) nơi ASRcan1 là một ASR tạm thời

• AsrToCIs : Đây là toán tử save [S0, ... ,Sn]can để một lớp tạm thời qua quản lý đối tượng. Các [S0, ... ,Sn]can hình thức thể hiện của một lớp mà thuộc tính đặc điểm kỹ thuật được quyết định bởi S0, ... ,Sn. Các định dạng của toán tử này là

- 60 - Các toán tử cơ bản

• Select : Toán tử select được sử dụng để chọn một tập hợp các bộ dữ liệu trong ASR một đáp ứng một điều kiện lựa chọn. Định dạng của toán tử này như sau: ASRcan = Select(ASRcan , selection condition),

hoặc [S0, ... ,Sn]can = δ<cond>( [S0, ... ,Sn]can).

• Navigate: Nếu biểu thức đường dẫn [tn-1.An] là một đường dẫn con của biểu thức đường dẫn [t0.A1…An] và có đã tồn tại một mở rộng kinh điển của ARScan[S0,…,Sn-

1]can. Ngoài ra, các miền của tn-1 cũng giống như của Sn-1. Toán tử sẽ mở rộng lý thuyết ASRcan[S0,…,Sn-1]can để ASRcan[S0,…,Sn-1, Sn]can, nơi mà Sn là miền của thuộc tính An. Định dạng của toán tử này như sau.

ASRcan2 = Navigate(ASRcan1 , tn-1.An), hoặc [S0,…,Sn]can2 = Vtn-1.An ([S0,...,Sn-1]canl ).

• Join : Toán tử này được sử dụng để nối hai ASRs theo các điều kiện join. Định

dạng của toán tử này như sau :

ASRcan3=Join(ASRcan1, ASRcan2, join condition), Hoặc

[S0,…,S2n+1]can3 = [S0,…,Sn]can1 <join condition>[S0,…,Sn]can2

• Union: Toán tử này được sử dụng để kết hợp hai ASRs có lĩnh vực phù hợp. Định

dạng của toán tử này như sau :

ASRcan3=Union(ASRcan1, ASRcan2 ), Hoặc

[S0,…,Sn]can3 = [S0,…,Sn]can1 [S0,…,Sn]can2

• Difference : Toán tử này được sử dụng để khác biệt hai ASRs có lĩnh vực phù hợp. Định dạng của toán tử này như sau :

ASRcan3= Difference (ASRcan1, ASRcan2 ), Hoặc

- 61 -

• Project : Toán tử select lựa chọn một số cột từ ASR quy định và loại bỏ các cột

khác. Định dạng của toán tử này là :

ASRcan2= Project (ASRcan, projection-list), Hoặc

[S0,…,Si]can2 = Π<projection-list>([S0,…,Sn]can) (0 ≤ i ≤ n) nơi project-list là danh sách các thuộc tính của ASRcan quy định Các toán tử mở rộng

• All: Toán tử được sử dụng để thực hiện All-Link

• Exist: Tương tự như vậy, toán tử được sử dụng để thực hiện các Exist-Link.

3.4.2. Sơ đồ thực thi chung

Sơ đồ thực thi chung là quá trình ánh xạ một đồ thị truy vấn tới một tập hợp các toán tử được xác định trong phần trước. Một ví dụ để minh họa cho sơ đồ thực thi chung. Xem xét các đồ thị truy vấn thể hiện trong hình 3.7 cho Query 1. Các sơ đồ thực thi được thể hiện như sau.

Bước 1: asrl = NewAsr ("Employee"); Bước 2: asr2= Navigate(asr1, e.Supervisor); Bước 3: asr3= NewAsr("Department"); Bước 4: Select(asr3, d.Location= "Taipei"); Bước 5: asr4= Navigate(asr3, d.Manager);

Bước 6: asr5=Join(asr2, asr4, tmpVarl= tmpvar2); Bước 7: asr6= Project(asr5, e.Name);

- 62 -

Trong chương này, đã trình bày các kỹ thuật xử lý truy vấn lồng nhau trong cơ sở dữ liệu hướng đối tượng. Truy vấn lồng nhau được thể hiện trong một OQL khai báo ngôn ngữ được định nghĩa trong ODMG-93. Một truy vấn được chuyển thành một đồ thị truy vấn bằng cách sử dụng thuật toán chuyển đổi biểu đồ. Đã định nghĩa một tập hợp các toán tử để thao tác ASRs trong việc xử lý truy vấn.

- 63 -

Chương 4 - KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Đánh giá những ưu điểm và hạn chế của luận văn:

Luận văn đã trình bày một cách có hệ thống các kiến thức liên quan đến vấn đề truy vấn cơ sở dữ liệu sử dụng biểu thức đường dẫn , tập trung nghiên cứu sâu về vấn đề xử lý truy vấn trong cơ sở dữ liệu hướng đối tượng nói chung và xử lý truy vấn sử dụng biểu thức đường dẫn nói riêng và vấn đề truy vấn biểu thức đường dẫn lồng nhau trong cơ sở dữ liệu hướng đối tượng.

Bên cạnh đó, trình bày về kỹ thuật Access Support Relations (ASRs) để đại diện và thao tác các biểu thức đường dẫn. Một truy vấn được chuyển đổi thành đồ thị truy vấn bằng cách sử dụng thuật toán chuyển đổi biểu đồ.

Tuy nhiên luận văn mới chỉ dừng lại ở mức nghiên cứu lý thuyết.

Hướng phát triển tiếp theo của luận văn:

- Lượng hóa trong biểu thức đường dẫn.

- Kỹ thuật tối ưu hóa lập chỉ mục và kỹ thuật tối ưu hóa dựa trên mô hình chi phí cơ sở.

- 64 - TÀI LIỆU THAM KHẢO

1. Michael Kifer, Won Kim, Yehoshua Sagiv (1992), “Querying object-oriented databases”, pp. 6-11.

2. Jeonghee Kim, Taisook Han, Kyu-young Whang (1999), “Visualization of Path Expressions in a Virtual Object-Oriented Database Query Language”.

3. R. Elmasri and S. B. Navati, Addison Wesley (2003), “Fundamental of Database Systems – 4th Edition”, chapter 21.

4. Đ.T. Nhân, N.T.N Mai, N.T.K Trang (2007), “Lý thuyết cơ sở dữ liệu 2”. 5. M. Tamer Özsu, José A. Blakeley (1994), “Query Processing in ObjectOriented

Database Systems”,pp.3-12

6. “Nested Query Processing Techniques in Object-oriented Databases” 7. Straube D. , and OZSU M (1990), “Queries and query processing in object

oriented database systems”, pp387–430.

8. Ioannidis Y, and Cha Kang Y (1990), “Randomized algorithms for optimizing large join queries”,pp312–321.

- 65 - PHỤ LỤC

Một phần của tài liệu Truy vấn cơ sở dữ liệu hướng đối tượng sử dụng biểu thức đường dẫn (Trang 50)