Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
488,02 KB
Nội dung
1 HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG - Phạm Quỳnh Điệp THUẬT TỐN CHUYỂN CÂU SQL TỪ CHƯƠNG TRÌNH NGUỒN SANG AQL Chuyên ngành: Khoa học máy tính Mã số: 60.48.01 NGƯỜI HƯỚNG DẪN KHOA HỌC : PGS TS Lê Huy Thập LUẬN VĂN THẠC SĨ KỸ THUẬT HÀ NỘI - 2012 LỜI MỞ ĐẦU Câu truy vấn tối ưu nâng cao hiệu thỏa mãn số tiêu chuẩn cho trước Một số phương pháp phân tích tối ưu hóa câu truy vấn dạng SQL AQL số tác giả nước nghiên cứu Một số thuật tốn cơng bố Tuy nhiên tất dựa giả thuyết câu vấn tin dạng SQL lấy trực tiếp từ chương trình nguồn hay người lập trình viết lập trình tối ưu hóa cách thủ cơng Một vấn đề đặt chương trình nguồn dạng mà có nhiều lệnh SQL thỏa mãn điều kiện song song hóa song song hóa tối ưu hóa phương pháp song song tự động Điều gây nhiều bất cập ứng dụng Việc tìm kiếm chương trình nguồn lệnh SQL sau chuyển sang AQL để hỗ trợ tối ưu hóa vấn tin vấn đề thời cần thiết Trong khuôn khổ luận văn vấn đề trình bày chương Chương 1, trình bày kiến thức số phần mềm tìm kiếm, tổng quan sở liệu (CSDL) phân tán, câu vấn tin SQL, AQL vấn tin, q trình tối ưu hóa ngơn ngữ lập trình Java Chương 2, trình bày thuật tốn tìm câu vấn tin SQL, tạo câu vấn tin AQL tốn tử Chương 3, xây dựng chương trình demo tìm câu vấn tin SQL từ chương trình nguồn sau chuyển câu SQL sang câu vấn tin AQL 3 Chương 1: TỔNG QUAN 1.1 Các phần mềm tìm kiếm Các phần mềm tìm kiếm “chìa khóa” quan trọng để giúp bạn tìm thấy thơng tin cụ thể mà bạn cần vơ số liệu mạng tồn cầu Các cơng cụ tìm kiếm dựa chương trình tự động Những cơng cụ tìm kiếm tự động, ví dụ Google tạo danh sách họ tự động Các chương trình tự động crawler hay spider bắt đầu làm việc, sau người tìm kiếm thơng qua mà chương trình tự động dị tìm 1.1.1 Google search: 1.1.2 Yahoo search 1.1.3 Một số lệnh tìm kiếm ngơn ngữ lập trình bậc cao 1.2 Tổng quan CSDL phân tán Những năm thập kỷ 70, máy tính có đủ khả xây dựng hệ thống tin hệ sở liệu Một mặt hình thành phát triển mơ hình lý thuyết cho hệ sở liệu mặt khác nguồn phát triển hệ thống ứng dụng ngày có nhiều kinh nghiệm Hệ thống thơng tin hình thành sở kết nối máy tính khác Những năm gần đây, hệ sở liệu phân tán phát triển dựa sở liệu mạng máy tính Cơ sở liệu phân tán gồm nhiều sở liệu tích hợp lại với thơng qua mạng máy tính để trao đổi liệu, thơng tin Cơ sở liệu tổ chức lưu trữ vị trí khác mạng máy tính chương trình ứng dụng làm việc sở truy cập liệu điểm khác Vấn đề hồn tồn xây dựng cài đặt sở liệu phân tán Cần giải vấn đề xây dựng cài đặt sở liệu phân tán cụ thể vấn đề thiết kế phân tán, thiết kế sở liệu 1.2.1 Khái niệm sở liệu phân tán 1.2.2 Lợi điểm sở liệu phân tán 1.3 Câu vấn tin SQL, AQL vấn tin 1.3.1 Câu vấn tin SQL (Structured Query Language) Đây loại ngôn ngữ liệu quan hệ xác nhận lầ mạnh Phép toán SQL phép ánh xạ, mô tả cú pháp khối SELECT - FROM - WHERE Mệnh đề SELECT nghĩa chọn thuộc tính ra, hay cịn gọi thuộc tính kết quả, khơng thuộc tính dùng dấu * có nghĩa tất thuộc tính quan hệ sau mệnh đề FROM Mệnh đề FROM để quan hệ cần cho việc xử lý Sau mệnh đề WHERE biểu thức điều kiện lọc liệu (hay gọi biểu thức logic) 1.3.2 Ngôn ngữ truy vấn đại số (AQL) Gọi r quan hệ tập thuộc tính R={ A1,….,An} Ta giả thiết quan hệ r tập hữu hạn Đối với phép hợp ( ký hiệu ) phép giao (ký hiệu ), phép trừ (ký hiệu -) hai quan hệ tham gia phải khả hợp 1.3.2.1 Phép hợp: Ký hiệu: Hợp hai quan hệ r s ký hiệu r s tập hợp thuộc r thuộc s thuộc r lẫn thuộc s: r s = { t: t r t s t r t s } 1.3.2.2 Phép giao: Ký hiệu: Giao hai quan hệ r s ký hiệu rs tập phải vừa thuộc r phải vừa thuộc s: r s = {t: t r v t s } 1.3.2 Phép trừ: Ký hiệu: 1.3.2.5 Phép chiếu (Projection) 1.3.2.6 Phép chọn (Selection) 1.3.2.7 Phép kết nối (Join) 1.3.2.8 Phép chia 1.3.2.9 Các ví dụ tìm kiếm đại số qua hệ 1.3.3 Cây vấn tin Cây vấn tin làm nhiệm vụ giải thích phương án thi hành câu SQL: Cho biết thứ tự thực phép tốn, phương pháp tính tốn tốn tử Mỗi nút hay nhiều phép toán đại số quan hệ, nút quan hệ sở Phần ghi nút mơ tả cách thức thực tốn tử 1.4 Sắp sếp lại phép nối viết lại câu vấn tin 1.4.1 Sắp sếp lại phép nối 1.4.2 Viết lại câu vấn tin 1.5 Quá trình tối ưu hóa Tối ưu hóa vấn tin phân tán phương pháp lựa chọn phương án thực câu vấn tin (QEP Query Executtion Plan) phân tán tốt theo nghĩa có chi phí thấp số phương án có khả thực thể vấn tin Chi phí thực diễn tả hàm chi phí, thường xem hàm mục tiêu Nó bao gồm chi phí xuất nhập, chi phí xử lý CPU chi phí truyền thơng tin Một đơn giản hố điển hình thể tối ưu hố vấn tin phân tán ban đầu bỏ qua chi phí xử lý cục (chi phí xuất nhập chi phí CPU) cách giả thiết chi phí truyền liệu chiếm ưu Dữ liệu vào thể tối ưu hóa vấn tin số liệu thống kê mảnh công thức đánh giá lực lượng quan hệ trung gian tạo Trong chương tập trung chủ yếu vào vấn đề thứ tự phép nối câu vấn tin phân tán vì: Phép nối thường phép tốn giảm liệu trung gian, câu vấn tin có ,chứa nối, chọn chiếu thường loại vấn tin hay gặp Hơn dễ dàng tổng qt hóa thuật tốn cho câu vấn tin có phép tốn hai ngơi phép hợp 1.6 Giới thiệu ngôn ngữ Java 1.6.1 Khái niệm Java (đọc “Gia-va”) ngơn ngữ lập trình dạng lập trình hướng đối tượng (OOP) Khác với phần lớn ngôn ngữ lập trình thơng thường, thay biên dịch mã nguồn thành mã máy thông dịch mã nguồn chạy, Java thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau mơi trường thực thi (runtime environment) chạy Bằng cách này, Java thường chạy nhanh ngơn ngữ lập trình thơng dịch khác Python, Perl, PHP,… Cú pháp Java vay mượn nhiều từ C & C++ có cú pháp hướng đối tượng đơn giản tính xử lý cấp thấp 1.6.2 Lịch sử hình thành ngơn ngữ Java 1.6.3 Một số đặc điểm bật ngôn ngữ lập trình Java 1.6.3.2 Thơng dịch: 1.6.3.3 Độc lập nền: 1.6.3.4 Hướng đối tượng: 1.6.3.5 Đa nhiệm – đa luồng (MultiTasking – Multithreading): 1.6.3.5 Khả chuyển (portable): 1.6.3.6 Hỗ trợ mạnh cho việc phát triển ứng dụng: 1.7 Kết luận chương Chương trình bày kiến thức cớ sở liệu phân tán, câu vấn tin SQL, câu vấn tin AQL vấn tin, sếp lại phép nối viết lại câu vấn tin, q trình tối ưu hóa ngơn ngữ lập trình Java Trên sở lý thuyết tảng cho qua trình tối ưu hóa vấn tin Chương trình bày thuật tốn tìm câu vấn tin SQL từ chương trình nguồn, chuyển câu vấn tin SQL sang câu vấn tin AQL thuật toán vẽ tốn tử 7 Chương 2: THUẬT TỐN CHUYỂN CÁC CÂU SQL TỪ CHƯƠNG TRÌNH NGUỒN SANG AQL 2.1 Mở đầu Câu vấn tin tối ưu nâng cao hiệu thỏa mãn số tiêu chuẩn cho trước Một số phương pháp tối ưu hóa dùng trực tiếp câu SQL, mang tính chất phương pháp luận ứng dụng, tối ưu động Ingres hay Ingres – QOA,… Tuy nhiên để câu vấn tin SQL cụ thể có tồn chương trình nguồn chưa Dưới trình bày phương pháp tìm kiếm vét cạn chương trình nguồn để tìm câu SQL, chuyển sang AQL, dựng toán tử dùng số phương pháp để tối ưu câu vấn tin AQL tức SQL cần thiết 2.2 Một số phương pháp tối ưu hóa câu vấn tin sở liệu tập trung Thuật tốn INGRES [1] Câu vấn tin q có n quan hệ, INGRES phân rã p thành ql q … qm Phân rã sứ dụng hai kỹ thuật bán: Tách Thế Thuật toán System R [1] Thuật toán System R thực tối ưu hóa tĩnh cách tìm kiếm vét cạn không gian phương án Đầu vào System R toán tử phân rã câu vấn tin SQL Đầu phương án thực để cài đặt toán tử tối ưu 2.3 Giới thiệu số tối ưu hóa câu vấn tin sở liệu phân tán Có ba thuật tốn tối ưu hóa vấn tin bản: thuật tốn rút gọn hệ INGRES phân tán, thuật toán System R* thuật toán SDD-1 Các thuật toán đại diện cho nhiều lớp thuật tốn khác thường dùng mơ thức ( hình dáng cách thức) 8 2.3.1 Thuật toán INGRES phân tán 2.3.2 Thuật toán System R* 2.3.3 Thuật toán SDD-1 2.4 Các thuật tốn tìm câu vấn tin SQL, tạo câu vấn tin AQL toán tử Câu vấn tin dạng SQL có cấu trúc SELECT FROM WHERE Vì tất câu mệnh đề chuyển dạng chuẩn AND (Tương đương với chuẩn hội, nên có mệnh đề chuẩn AND) Câu vấn tin dạng AQL chuyển đổi phép toán SQL sang phép toán đại số quan hệ Một SQL có nhiều AQL tương ứng Việc chọn lựa AQL để thực dựa vào khả tối ưu hóa AQL Cây tốn tử việc thể câu AQL Cách biến đổi câu vấn tin phép tính quan hệ trở thành toán tử sau: Trước hết tạo nút quan hệ SQL nút nằm sau FROM Nút gốc tạo phép chiếu chứa thuộc tính kết quả, thuộc tính nằm sau SELECT Lượng tử hố (vị từ sau WHERE ) chuyển thành phép tính quan hệ thích hợp (phép chọn, phép nối ,…) từ nút đến gốc Chuỗi cho trực tiếp qua thứ tự xuất vị trí tốn tử 2.4.1 Thuật tốn tìm câu SQL chương trình nguồn Thuật tốn tìm kiếm vét cạn tất câu vấn tin dạng SQL chương trình nguồn đưa vào hàng đợi chờ xử lí TimKiem_SQL Vào: Chương trình nguồn Ra: Các câu truy vấn SQL While NOT EOF If Push SQL Into QueueSQL End If Continue End While Bổ đề Tất câu lệnh dạng SQL đưa vào hàng đợi QueueSQL Thuật tốn có điểm dừng 2.4.2 Thuật tốn chuyển SQL sang AQL Thuật toán lấy câu SQL lưu trữ hàng đợi QueueSQL, chuyển đổi kí hiệu phép toán 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 AQL kí hiệu câu truy vấn AQL While QueueSQL Pop QueueSQL Save Into Tam.txt Do while NOT EOF() Push (các thuộc tính sau SELECT) Into QueueAQL Repeat Find If . Pop & . Push Into QueueAQL Else . & Pop & 11 Chú ý tập phép toán quan hệ gồm {=, < , , >= , NOT, AND, OR} tương ứng với phép toán đại số quan hệ {=, < , , > , , , , } 2.4.3 Thuật toán Tạo AQL Thuật toán dùng để thể vâu truy vấn AQL Tạo AQL Vào: QueueAQL Ra: Các câu vấn tin dạng AQL hàng đợi QueueVT_AQL While QueueAQL Str = “” Count = Repeat Str = Str & “(“ & Pop Count = Count +1 Until For i = To Count Str = Str & “)” End for Push Into QueueVT_AQL End While 2.4.4 Thuật toán Vẽ Cây Toán Tử Thuật toán dùng để vẽ tốn tử có QueueVT_AQL Vào: QueueVT_AQL Ra: Cây toán tử Output (“Cần vẽ toán tử thứ k = “) Input k While (1) For i = To k -1 If QueueVT_AQL Pop 12 Else Exit While End if End for Pop Into StrXau // Lấy câu AQL thứ k khỏi hàng đợi cho vào biến //StrXau StrXau = Right(StrXau, length (strXau) - l = length (strXau) For i = To l If strXau(i) = “(“ XauVe = Left(StrXau, i) Vẽ điểm gắn nhãn XauVe StrXau = Right(StrXau, l – i) l = length (strXau) Exit While End While Ví dụ Cho CSDL gồm 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ụ 13 Gỉa sử tệp chương trình nguồn có lệnh SQL: SELECT TenNV {Gốc } 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) Nghĩa là: Tìm tên nhân viên, trừ Lê Hồng Ngọc làm cho dự án “Cầu Long Biên” 12 tháng 24 tháng Sau áp dụng thuật toán câu lệnh AQL là: TenNV(TG=12 TG=24(TenDA = ”Cầu Long Biên”(TenNV ”Lê Hồng Ngọc ”(DA MaDA(PN MaNVNV))))) Cịn tốn tử sau TenNV Chiếu TenNV ”Lê Hồng Ngọc ” TenDA = ”Cầu Long Biên” Chọn TG=12 TG=24 MaDA DA MaNV PN NV Hình 1.5 Ví dụ tốn tử Nối 14 2.5 Kết luận Chương giới thiệu thuật toán tối ưu hóa câu vấn tin, sở liệu phân tán, thuật tốn tìm câu vấn tin SQL chương trình nguồn, chuyển câu vấn tin SQL sang câu vấn tin AQL thuật toán vẽ toán tử 15 Chương 3: CHƯƠNG TRÌNH ĐỀ MƠ Qua nghiên cứu sở lý thuyết chương thuật tốn chương 2, chương xây dựng chương trình đề mơ Tìm tất câu vấn tin SQL từ chương trình nguồn sau chuyển câu vấn tin SQL sang câu vấn tin AQL vẽ toán tử dạng AQL Dưới vài hình ảnh chương trình đề mơ: Màn hình chương trình Hình 1.6 Màn hình chương trình đề mơ Sau chọn file nguồn (giả sử ta chọn file a.java thư mục C:/Users/diep_pq/Documents/) tìm câu truy vấn SQL file chọn ta click vào nút ‘Tim cau SQL’ Kết sau 16 Hình 1.9 Màn hình kết tìm câu truy vấn SQL Ta chuyển câu truy vấn SQL thứ k (trong vi dụ k