1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng mô đun sinh tự động mã nguồn trigger trên ngôn ngữ c phục vụ cập nhật gia tăng, đồng bộ các khung nhìn thực với truy vấn lồng cho postgresql

26 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 697,43 KB

Nội dung

ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC SƢ PHẠM  LÊ THỊ THẢO NGUYÊN XÂY DỰNG MÔ-ĐUN SINH TỰ ĐỘNG MÃ NGUỒN TRIGGER TRÊN NGÔN NGỮ C PHỤC VỤ CẬP NHẬT GIA TĂNG, ĐỒNG BỘ CÁC KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG CHO POSTGRESQL Chuyên ngành: Hệ thống thông tin Mã số: 8480104 TÓM TẮT LUẬN VĂN THẠC SĨ HỆ THỐNG THƠNG TIN Đà Nẵng – Năm 2018 Cơng trình hồn thành TRƯỜNG ĐẠI HỌC SƯ PHẠM Người hướng dẫn khoa học: TS Nguyễn Trần Quốc Vinh Phản biện 1: PGS TS Nguyễn Thanh Bình Phản biện 2: GS TS Nguyễn Thanh Thủy Luận văn bảo vệ trước Hội đồng chấm Luận văn tốt nghiệp thạc sĩ Hệ thống thông tin họp Trường Đại học Sư phạm vào ngày 18 tháng 11 năm 2018 Có thể tìm hiểu luận văn tại: Thư viện Trường Đại học Sư phạm – ĐHĐN Khoa Tin Học, Trường Đại học Sư phạm – ĐHĐN LỜI MỞ ĐẦU Lý chọn đề tài Khung nhìn thực (KNT) kỹ thuật giúp cải thiện nâng cao tốc độ thực thi truy vấn phức tạp, có tần suất sử dụng cao lượng liệu lớn Đối với truy vấn phức tạp bao gồm nhiều phép nối hàm thống kê, hiệu sử dụng KNT rõ rệt, đặc biệt áp dụng lượng liệu đủ lớn Đến nay, kỹ thuật KNT triển khai hệ quản trị sở liệu (HTQCSDL) thương mại lớn Oracle, Microsoft SQL Server, IBM DB2,… ngày ứng dụng rộng rãi PostgreSQL HQTCSDL mã nguồn mở hàng đầu giới, nhiên KNT triển khai PostgreSQL phiên 9.3.4 chưa hỗ trợ vấn đề cập nhật đồng gia tăng Thay vào đó, PostgreSQL cập nhật KNT theo chế toàn phần bất đồng bộ, tức thực thi lại toàn truy vấn dùng để tạo KNT cần cập nhật Điều tốn chi phí xấp xỉ chi phí thực truy vấn, không đảm bảo liệu KNT ln Đến phiên 10 có bổ sung tính cập nhật đồng thời, nhiên tính hỗ trợ việc truy cập đồng thời đến KNT, nghĩa cung cấp khả truy cập bảng KNT để trả lời truy vấn cập nhật lệnh refresh materialized view, chưa đề cập đến vấn đề CNGT Cập nhật gia tăng (CNGT) kỹ thuật cập nhật liệu KNT cách đồng bộ, thực liệu bảng gốc (BG) tham gia vào KNT có thay đổi, nhờ giúp cho KNT trạng thái cập nhật Do vậy, việc nghiên cứu kỹ thuật CNGT cho KNT PostgesSQL quan tâm Việc CNGT KNT thực thông qua việc xây dựng trigger bắt kiện làm thay đổi liệu bảng gốc, từ tiến hành xác định thay đổi làm ảnh hưởng đến tính đắn kết lưu KNT, sau tiến hành việc cập nhật liệu KNT PostgreSQL hỗ trợ loại trigger trigger viết ngôn ngữ PL/pgSQL trigger viết ngôn ngữ C Đã có nghiên cứu việc sử dụng trigger mã nguồn PL/pgSQL để CNGT đồng cho KNT PostgreSQL [2, 3, 5], trigger mã nguồn PL/pgSQL đánh giá có hiệu chưa cao hầu hết xử lý so với trigger ngôn ngữ C, trigger ngôn ngữ C thực thi nhanh so với trigger ngơn ngữ PL/pgSQL (khoảng 13%) Vì vậy, nghiên cứu đề xuất sử dụng ngôn ngữ C làm mã nguồn cho trigger xây dựng mô-đun để sinh tự động trigger cho tất BG tham gia vào truy vấn, phục vụ thực CNGT KNT chế đồng bộ, phần giao tác thực thao tác liệu BG Đã có nghiên cứu [1, 2, 3] xây dựng chương trình sinh mã nguồn trigger tự động ngơn ngữ C, triển khai thuật tốn CNGT KNT HQTCSDL PostgreSQL Tuy nhiên nghiên cứu chưa quan tâm đến KNT tạo truy vấn lồng, truy vấn đệ quy, truy vấn bao gồm phép nối ngồi Có thể thấy truy vấn lồng (SubQuery) dạng truy vấn phổ biến, tần suất xuất cao, nhiên nghiên cứu CNGT KNT cho PostgreSQL đến chưa hỗ trợ dạng truy vấn Vì vậy, tơi chọn đề tài “Xây dựng mô-đun sinh tự động mã nguồn trigger ngôn ngữ C phục vụ cập nhật gia tăng, đồng khung nhìn thực với truy vấn lồng cho PostgreSQL” làm khóa luận tốt nghiệp cao học Mục tiêu nhiệm vụ đề tài 2.1 Mục tiêu Xây dựng chương trình sinh tự động mã nguồn trigger ngơn ngữ C phục vụ cập nhật gia tăng, đồng khung nhìn thực với truy vấn lồng PostgreSQL Chương trình có khả sinh mã SQL cài đặt khung nhìn thực, trigger bảng gốc để cập nhật gia tăng, đồng khung nhìn thực 2.2 Nhiệm vụ Tìm hiểu biên dịch sử dụng trigger viết ngơn ngữ C PostgreSQL Tìm hiểu nghiên cứu sở lý thuyết cập nhật gia tăng, đồng KNT với truy vấn lồng Khai thác thuật tốn CNGT KNT có để ứng dụng vào đề tài, đặc biệt thuật toán CNGT KNT với truy vấn lồng Đối tƣợng phạm vi nghiên cứu 3.1 Đối tƣợng nghiên cứu CSDL quan hệ, HQT CSDL quan hệ, ngơn ngữ lập trình C Trigger HQT CSDL quan hệ Truy vấn lồng, khung nhìn thực Thuật tốn CNGT KNT với truy vấn lồng 3.2 Phạm vi nghiên cứu HQT CSDL PostgreSQL Kỹ thuật viết trigger cho PostgreSQL ngôn ngữ C Cách sử dụng trigger viết ngôn ngữ C PostgreSQL Các thuật toán CNGT cho KNT PostgreSQL Thuật toán CNGT KNT hỗ trợ truy vấn lồng Phƣơng pháp nghiên cứu Về phương pháp nghiên cứu, sử dụng hai phương pháp nghiên cứu lý thuyết nghiên cứu thực nghiệm 4.1 Phƣơng pháp lý thuyết Thu thập, chọn lọc, phân loại, ghi nghiên cứu tài liệu (sách, báo, luận văn, trang web) có liên quan đến khung nhìn thực, HQTCSDL PostgreSQL, cập nhật gia tăng KNT, đồng KNT, sinh mã trigger ngôn ngữ C 4.2 Phƣơng pháp thực nghiệm Dựa lý thuyết nghiên cứu, tiến hành xây dựng chương trình sinh tự động mã trigger thực cập nhật gia tăng khung nhìn thực với truy vấn lồng hệ sở liệu PostgreSQL; thử nghiệm máy đơn đánh giá tốc độ cập nhật liệu bảng gốc (BG) có trigger cập nhật KNT Ý nghĩa khoa học thực tiễn đề tài 5.1 Ý nghĩa khoa học Đề xuất thuật toán cập nhật gia tăng KNT truy vấn lồng Đề xuất thuật toán sinh tự động mã nguồn trigger ngôn ngữ C phục vụ cập nhật gia tăng bảng khung nhìn thực truy vấn lồng hệ quản trị sở liệu PostgreSQL 5.2 Ý nghĩa thực tiễn Áp dụng chương trình vào sở liệu PostgreSQL nhằm làm tăng tốc độ thực thi truy vấn liệu mà đảm bào ràng buộc tồn vẹn liệu Chương trình sinh tự động mã trigger C thực CNGT KNT có tính ứng dụng cao, giúp tiết kiệm thời gian công sức người quản trị CSDL làm việc với HQTCSDL PostgreSQL HQTCSDL mã nguồn mở có hỗ trợ trigger ngơn ngữ C Chương trình sinh tự động mã nguồn trigger hỗ trợ lập trình viên sinh mã trigger Cấu trúc luận văn Chƣơng 1: Nghiên cứu tổng quan, chương giới thiệu tổng quan ngôn ngữ lập trình C, truy vấn lồng KNT; cập nhật gia tăng, đồng KNT Trình bày vấn đề liên quan đến trigger C PostgreSQL Chƣơng 2: Khung nhìn thực PostgreSQL thuật tốn cập nhật gia tăng khung nhìn thực với truy vấn lồng, chương trình bày phương pháp cập nhật KNT; phân tích thuật tốn cập nhật gia tăng KNT với truy vấn lồng Chƣơng 3: Xây dựng chương trình sinh tự động mã nguồn trigger thực cập nhật gia tăng khung nhìn thực với truy vấn lồng, chương trình bày cách cài đặt mơi trường CSDL ngơn ngữ lập trình; xây dựng mơ-đun sinh mã tự động trigger CHƢƠNG NGHIÊN CỨU TỔNG QUAN 1.1 Tổng quan ngơn ngữ lập trình C 1.1.1 Ngơn ngữ lập trình C C ngơn ngữ có hiệu ưa chuộng để viết phần mềm hệ thống, dùng cho việc viết ứng dụng C ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng, tạo với mục tiêu làm cho thuận tiện để viết chương trình lớn 1.1.2 Đặc điểm ngôn ngữ C Ngôn ngữ C có đặc điểm sau: C sử dụng để lập trình bậc thấp C cung cấp nhiều hàm có sẵn giúp việc phát triển ứng dụng trở nên nhanh chóng Ngơn ngữ C có khả mở rộng dễ dàng nhận tính 1.2 Tổng quan truy vấn lồng 1.2.1 Đặc điểm truy vấn lồng Là dạng truy vấn mà câu lệnh Select lồng câu lệnh select Câu lệnh Select bên gọi truy vấn Câu lệnh Select bên gọi truy vấn hay truy vấn Có loại: - Loại 1: Truy vấn nằm mệnh đề WHERE SELECT FROM INNER JOIN ON INNER JOIN ON … WHERE (SELECT FROM < danh sách bảng> WHERE) - Loại 2: Truy vấn nằm mệnh đề FROM SELECT FROM , , () AS WHERE Các câu lệnh Select lồng nhiều mức Câu truy vấn thường trả tập giá trị Mệnh đề Where câu truy vấn - So sánh tập hợp thường với số toán tử IN, NOT IN, ALL, ANY, EXISTS… 1.2.2 Phân loại Dựa vào đặc điểm câu truy vấn người ta phân truy vấn lồng thành loại chính: - Truy vấn lồng phân cấp: Khi nội dung câu truy vấn độc lập với câu truy vấn cha Cú pháp: SELECT A FROM X WHERE … (SELECT B, C FROM Y) … Ví dụ: Đưa mã, tên sinh viên thuộc lớp CNTT SELECT ma_sv, ten_sv FROM sinhvien WHERE ma_lop IN ( SELECT ma_lop FROM lop WHERE ten_lop = „CNTT – 1‟) Ở ví dụ trên, câu truy vấn SELECT ma_lop FROM lop WHERE ten_lop = „CNTT – 1‟không sử dụng thành phần câu truy vấn cha Do câu truy vấn lồng phân cấp - Truy vấn lồng tương quan: Khi nội dung câu truy vấn phụ thuộc vào câu truy vấn cha Cú pháp: SELECT A FROM X WHERE … (SELECT B, C FROM Y WHERE B = X.A) … Ví dụ: Đưa mã, tên sinh viên thuộc lớp CNTT SELECT ma_sv, ten_sv FROM sinhvien WHERE EXISTS ( SELECT* FROM Lop WHERE ma_lop = sinhvien.ma_lop AND ten_lop = „CNTT – 1‟) Ở ví dụ này, câu truy vấn SELECT* FROM Lop WHERE ma_lop = sinhvien.ma_lop and ten_lop = „CNTT – 1‟ WHERE ma_lop = sinhvien.ma_lop có sử dụng thành phần câu truy vấn cha qua biểu thức so sánh ma_lop = sinhvien.ma_lop Do đó, câu truy vấn lồng tương quan 1.3 Tổng quan khung nhìn thực 1.3.1 Giới thiệu chung Khung nhìn thực (KNT - Materialized view) đối tượng sở liệu (CSDL) dùng để lưu trữ kết thực thi truy vấn, giúp cải thiện nâng cao tốc độ thực thi truy vấn phức tạp, có tần suất sử dụng cao lượng liệu lớn Ý tưởng KNT dựa bảng kết sẵn có để trả lời truy vấn cách nhanh chóng mà khơng cần thực thi lại truy vấn Hiệu sử dụng KNT rõ rệt đặc biệt áp dụng lượng liệu đủ lớn, bỏ qua bước thực thi phép nối hàm thống kê vốn thành phần chiếm nhiều chi phí trình thực thi truy vấn Tuy nhiên, việc sử dụng KNT có nhược điểm; là: KNT làm tiêu tốn không gian lưu trữ phải cập nhật bảng chi tiết sửa đổi 1.3.2 Phân loại khung nhìn thực Phân loại khung nhìn thực theo số loại [15] sau: 1.3.2.1 KNT (snapshot materialized view) 1.3.2.2 KNT hăm hở (eager materialized view) 1.3.2.3 KNT lười (very lazy materialized view): 1.3.2.4 KNT lười (lazy materialized view): 1.4 Tổng quan cập nhật gia tăng, đồng khung nhìn thực 1.4.1 Tổng quan cập nhật gia tăng Cập nhật gia tăng sửa đổi nội dung KNT tương ứng với thay đổi bảng gốc Thông thường, cập nhật gia tăng địi hỏi chi phí tài nguyên nhỏ so với cập nhật hoàn toàn Để trì bảng KNT trạng thái thực tiễn, cần phải cập nhật chúng có thay đổi liệu bảng gốc Trên thực tế, có tốn hệ thống thơng tin địi hỏi phải tính đến cách khơng chậm trễ phần số thay đổi liệu bảng gốc Từ xuất khả trì hỗn cập nhật KNT Khả cho phép giảm số lượng cập nhật KNT, thơng qua nâng cao đáng kể suất tổng thể hệ thống 1.4.2 Cập nhật đồng khung nhìn thực Phụ thuộc vào thời hạn cập nhật thay đổi vào bảng KNT, chế cập nhật phân đồng không đồng Cập nhật đồng thực thi khơng chậm trễ có thay đổi liệu bảng gốc phần giao tác thực thay đổi 1.5 Cập nhật khung nhìn thực trigger C PostgreSQL 1.5.1 Khái niệm trigger Trigger thủ tục đặc biệt mà việc thực thi tự động có kiện xảy ra, kiện gọi thủ tục đặc biệt định nghĩa câu lệnh, thông thường thực với kiện liên quan đến Insert, Update, Delete liệu Trigger sử dụng việc bảo đảm toàn vẹn liệu theo quy tắc xác định, quản lý theo bảng liệu khung nhìn 1.5.2 Trigger HQT CSDL Trigger thực thi trước sau kiện xảy ra, bao gồm mức: Row Level Trigger Column Level Trigger For Each Row Type For Each Statement Type 1.5.3 Trigger PostgreSQL Trigger PostgreSQL xử lý tập ghi, xử lý ghi Chỉ trigger xử lý ghi nhìn thấy liệu thao tác Vì đề tài thực sinh mã nguồn trigger bắt kiện thay đổi liệu BG theo chế xử lý ghi tập ghi cập nhật 1.5.4 Hàm C Hàm ngôn ngữ C biên dịch thành thư viện chia sẻ với phần mở rộng tương ứng *.dll (trên hệ điều hành Windows) 10 CHƢƠNG KHUNG NHÌN THỰC TRONG POSTGRESQL VÀ THUẬT TỐN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG 2.1 PostgreSQL khung nhìn thực PostgreSQL PostgreSQL hệ quản trị sở liệu (HQT CSDL) mã nguồn mở PostgreSQL tạo lòng tin độ tin cậy tính đắn, tồn vẹn liệu, thông tin truyền thông khuyến cáo sử dụng Là HQT CSDL mã nguồn mở hàng đầu giới KNT triển khai PostgreSQL phiên 9.3.4, 9.4, 10… KNT tính bảng ảo tiện lợi khác hỗ trợ PostgreSQL KNT đánh mục, không giống views thông thường tạo lần chúng gọi, KNT ảnh chụp thời điểm Chúng không làm (refreshed) ngoại trừ định Điều tăng đáng kể tốc độ với truy vấn chạy sử dụng KNT Tuy nhiên KNT PostgreSQL chưa hỗ trợ vấn đề cập nhật đồng gia tăng Do vậy, việc nghiên cứu kỹ thuật CNGT cho KNT PostgesSQL quan tâm 2.2 Các phƣơng pháp cập nhật KNT 2.2.1 Phương pháp làm KNT Việc triển khai KNT cho HQT CSDL PostgreSQL đưa vào phiên 10 việc cập nhật thực thông qua lệnh refresh materialized view Điều tốn chi phí xấp xỉ chi phí thực truy vấn, không đảm bảo liệu KNT luôn Bất người dùng truy cập liệu KNT thấy liệu lần cập nhật gần nhất, thời điểm Người dùng phải cập nhật lệnh refresh materialized view, tùy thuộc vào người quản trị hệ thống nhu cầu sử dụng liệu Phương pháp không hiệu quả, đặc biệt liệu KNT yêu cầu tính xác thời điểm 2.2.2 Phương pháp cập nhật gia tăng đồng Cập nhật gia tăng kỹ thuật cập nhật liệu KNT cách đồng bộ, thực liệu BG tham gia 11 vào KNT có thay đổi, nhờ giúp cho KNT ln trạng thái cập nhật Việc CNGT KNT thực thông qua việc xây dựng trigger bắt kiện làm thay đổi liệu BG, từ xác định thay đổi làm ảnh hưởng đến tính đắn kết lưu KNT, sau tiến hành việc cập nhật liệu KNT Có thể xem thao tác CNGT phần giao tác thay đổi liệu BG Nghiên cứu đề xuất tạo KNT bảng (table), sau sử dụng hệ thống trigger cài đặt BG bắt kiện thay đổi liệu, từ cập nhật vào KNT thay đổi liên quan 2.2.3 Một số vấn đề cần quan tâm CNGT KNT với truy vấn lồng Để trình CNGT tối ưu, ta phải quan tâm đến vấn đề sàng lọc liệu Chỉ liệu liên quan trực tiếp đến KNT ảnh hưởng đến tính đắn liệu KNT cần cập nhật Điều thực thơng qua việc phân tích mệnh đề JOIN, WHERE, FROM để đưa điều kiện sàng lọc liệu Mỗi thao tác liệu xảy BG, thơng qua điều kiện lọc, ta xác định liệu xử lý có ảnh hưởng đến KNT hay khơng, từ đưa định tiếp tục thực thi phần mã CNGT hay thoát khỏi hàm trigger Thứ hai, ta phải quan tâm đến phép nối truy vấn Khi KNT tạo sở truy vấn bao gồm nhiều phép nối bảng với nhau, trình CNGT cần chắn liệu KNT ln đảm bảo tính tồn vẹn, ràng buộc bảng số BG có thay đổi 2.3 Thuật toán cập nhật gia tăng KNT với truy vấn lồng 2.3.1 Thuật toán chuyển từ truy vấn lồng sang truy vấn nối Một TVG có dạng (chỉ áp dụng bảng trường hợp IN): SELECT FROM INNER JOIN ON WHERE (SELECT FROM < danh sách bảng> WHERE) Bƣớc 1: Gọi tập trường chứa mệnh đề là: 12 SELECT SELc; FROM FROc IN Inc; WHERE WHEc Phép nối (Join) A; SELECT lồng SELl FROM lồng FROl; IN lồng INl WHERE lồng WHEl; Phép nối (Join) lồng B Bƣớc 2: Chuyển câu truy vấn có Join dạng Where SELECT SELc FROM FROc WHERE WHEc AND A AND Inc IN (SELECT SELl FROM FROl WHERE WHEl AND B) Bƣớc 3: Chuyển câu truy vấn lồng truy vấn nối SELECT SELc FROM FROc  FROl WHERE WHEc AND WHEl AND A AND B Cho CSDL quản lý sinh viên đơn giản với bảng quan hệ – n: Hình 2.2 CSDL quản lý sinh viên đơn giản với bảng Ví dụ: Đưa danh sách sinh viên học tập khoa Tin: Truy vấn lồng: SELECT ma_sv, ten_sv FROM sinh_vien WHERE ma_lop IN (SELECT ma_lop FROM lop WHERE ma_khoa = „TI‟) Truy vấn nối trong: SELECT ma_sv, ten_sv FROM sinh_vien JOIN lop ON sinh_vien.ma_lop = lop.ma_lop WHERE ma_khoa = „TI‟ Phân tích câu lệnh truy vấn lồng 13 Danh sách SELECT (SELc): ma_sv, ten_sv Danh sách FROM (FROc): sinh_vien Danh sách IN (INc): ma_lop Danh sách WHERE (WHEc): khơng có Danh sách SELECT lồng (SELl): ma_lop Danh sách FROM lồng (FROl): lop Danh sách IN lồng (INl): khơng có Danh sách WHERE lồng (WHEl): ma_khoa = “TI‟ Từ phân tích truy vấn lồng ta chuyển đổi sang truy vấn nối sau: SELECT SELc FROM FROc JOIN FROl ON FROc INc = FROl.SELl WHERE WHEc AND WHEl Dựa vào thuật tốn phân tích chuyển đổi ví dụ ta áp dụng thuật tốn cập nhật gia tăng khung nhìn thực với truy vấn nối trình bày mục 2.3.3 để cập nhật gia tăng khung nhìn thực với truy vấn lồng 2.3.2 Điều kiện triển khai thuật toán Trong phạm vi đề tài phục vụ cho KNT tạo sở TVG thỏa mãn điều kiện sau đây: - Điều kiện nối bảng liên quan trực tiếp đến bảng - Tất khóa bảng phải tham gia vào mệnh đề SELECT - Đối với truy vấn lồng có nhiều so sánh tập hợp nhiên luận văn đề cập đến phép IN - Các truy vấn lồng chuyển đổi thành truy vấn nối 2.3.3 Thuật toán cập nhật gia tăng khung nhìn thực với truy vấn nối 2.3.3.1 Truy vấn SPJ (Select – Project – Join) Truy vấn SPJ truy vấn bao gồm mệnh đề SELECT, FROM, WHERE, không bao gồm chức nhóm tổng hợp Từ mệnh đề chứa kết nối bên Đối với trường hợp SPJ KNT, xây dựng chương trình tạo mã kích hoạt thực cập nhật gia tăng dựa thuật toán cải 14 tiến phát hành trước [13] tạo phần mềm cho tổng hợp tự động mã nguồn kích hoạt để cập nhật gia tăng KNT xem xét rằng: - Kết truy vấn chứa trùng lặp; - Bất kỳ khóa BG thêm tự động vào mệnh đề SELECT; - Xem xét hoạt động sửa đổi dạng hoạt động tương đương xóa chèn tiếp; - Loại trừ thao tác liệu BG không ảnh hưởng đến KNT; KNT kiểu SPJ KNT tạo sở truy vấn SPJ – truy vấn chứa phép chọn, chiếu nối; kết thực thi truy vấn chứa ghi trùng lặp, khơng bao gồm phép tốn thống kê (SUM, COUNT, AVG, MIN, MAX…) Truy vấn tạo KNT kiểu SPJ với truy vấn gốc: SELECT FROM INNER JOIN ON INNER JOIN ON … WHERE Trong F: Mệnh đề FROM, tập BG T1, T2…Tn sử dụng truy vấn tạo KNT J: Tập hợp điều kiện phép nối W: Mệnh đề WHERE, điều kiện chọn lựa ghi để xử lý Ti={ i=1, 2, ,n}– tập hợp bảng gốc sử dụng truy vấn Fins: Mệnh đề FROM trường hợp thêm ghi Fdel: Mệnh đề FROM trường hợp xóa ghi Cứ liệu BG cập nhật, KNT sử dụng liệu trở nên khơng thực tiễn Để trì bảng KNT trạng thái thực tiễn (actual state), cần phải cập nhật chúng có thay đổi liệu (insert, update, delete) BG Quá trình làm cho liệu KNT tương ứng với liệu BG gọi thực tiễn hoá (actualization, cập nhật) 15 CNGT thực điều chỉnh phần liệu KNT liên quan đến sửa đổi liệu BG Trong hầu hết trường hợp thực CNGT KNT kiểu SPJ Chúng ta xét riêng rẽ ba trường hợp thêm mới, sửa đổi xoá ghi a Trường h p thêm c c ghi Giả sử tập hợp ghi Tiins thêm vào BG Ti Bước 1: Fins = T1 J T2 J …… d Tiins J … Tn Bước 2: dQiins = Select S from Fins where W Bước 3: Insert into MV Select dQiins b Trường h p xo c c ghi Giả sử tập hợp ghi Tidel xoá từ BG Ti Bước 1: Fdel = T1 J T2 J …… d Tidel J … Tn Bước 2: dQidel = Select S from Fdel where W Bước 3: For each X in dQidel: Delete from MV Where MV (X) = (X) And MV (X) = (X) And MV (X) = (X) c Trường h p sửa đổi c c ghi Giả sử BG , tập hợp ghi Tiold thay đổi thành tập hợp Tinew Trong trường hợp thực thi mục b sau mục a để CNGT KNT (update Ti = delete Tiold + insert Tinew), với Tidel = Tiold Tiins = Tinew tương ứng Trong đó, ghi < > tương ứng với ghi < > 2.3.3.2 Truy vấn nối bao gồm c c hàm thống kê Thuật toán CNGT đồng KNT sở truy vấn bao gồm phép nối tham khảo từ cơng trình nghiên cứu [2], chủ yếu tổng hợp phát triển từ nghiên cứu [6-11] Thuật toán chưa quan tâm đến KNT tạo sở truy vấn lồng, truy vấn đệ quy, truy vấn bao gồm phép nối Giả sử KNT tạo sở truy vấn bao gồm hàm thống kê Q (S, F, J, W, G) Trong đó: S: Mệnh đề SELECT, tập cột lựa chọn S bao gồm cột hàm thống kê với biểu thức (E) 16 cột từ BG SUM(E), COUNT(E), AVG(E), MIN(E) MAX(E) E không chứa hàm thống kê F: Mệnh đề FROM, tập BG T1, T2…Tn sử dụng truy vấn tạo KNT J: Tập hợp điều kiện phép nối W: Mệnh đề WHERE, điều kiện chọn lựa ghi để xử lý G: Mệnh đề GROUP BY, tập cột gộp nhóm A = S\G - tập hợp hàm thống kê mệnh đề SELECT a Tạo khung nhìn thực Thơng tin cách thức biến đổi truy vấn để tạo KNT, cụ thể, thông tin cột bảng KNT giúp làm rõ thuật tốn cập nhật Mục đích việc biến đổi để sử dụng KNT tối ưu tối ưu việc thực CNGT KNT S bao gồm cột lưu bảng KNT Về hàm thống kê, ta xem xét trường hợp SUM(E), COUNT(E), AVG(E), MIN(E) MAX(E) Từ quy định cú pháp lệnh truy vấn SELECT ngôn ngữ SQL suy luận từ đại số quan hệ, khẳng định, “cột” S hiểu là: i) Một cột từ BG, ii) Biểu thức đại số hàm thống kê, iii) Biểu thức đại số cột từ BG hàm thống kê Biểu thức (E) đề cập không bao gồm hàm thống kê, nghĩa khơng có trường hợp hàm thống kê tham số hàm thống kê Với trường hợp iii), cột tham gia vào biểu thức cách ngang hàng với hàm thống kê (chẳng hạn cột colA truy vấn: SELECT…, (colA + SUM(colB)) AS sumAB… GROUP BY …, colA), ta xem xét cột bình thường khác tham gia vào G Vậy nên, thay lưu kết biểu thức đại số hàm thống kê hàm thống kê cột, ta lưu kết thực thi hàm thống kê b Thuật to n cập nhật gia tăng Sự kiện thay đổi liệu BG chia theo ba loại thao tác: Thêm (insert), cập nhật (update) xoá (delete) tập ghi Nếu xét phương diện giá trị 17 tương ứng với tập cột, giá trị trùng Ta gọi “tập” túi Hầu hết cơng trình liên quan CNGT KNT cơng bố trước xem trường hợp thao tác cập nhật (update) tương đương với việc xoá túi ghi sau thêm túi ghi [2, 6] Tuy nhiên, việc chia tách tốt Trong trường hợp truy vấn không bao gồm hàm thống kê MIN(E), MAX(E), ta khơng cần phải phân tích update thành insert delete [2] Trong trường hợp truy vấn bao gồm hàm thống kê MIN(E), MAX(E), việc phân tích update thành insert delete tất nhiên, khơng có lựa chọn khác Với insert, ta không cần quan tâm đến liệu BG, giá trị thêm vào thay giá trị MIN(E), MAX(E) cách so sánh với giá trị bảng KNT Với delete, rõ ràng, xố ghi có giá trị trường MIN(E) MAX(E), ta phải tìm lại giá trị MIN(E), MAX(E) từ BG Trường hợp thao tác thứ – thêm tập ghi dTinew vào bảng Ti B1 Loại từ dTinew ghi không thoả C Tất nhiên, ghi khơng thoả W khơng thể có tác động đến kết thực thi nên ta không cần thiết xét ghi đó, loại từ đầu Thường J chứa điều kiện kiểu Ti.C1 = Tj.C2 Tuy nhiên, số trường hợp, J bao gồm điều kiện lọc thơng thường với vế biểu thức đại số cột từ BG, vế thứ hai số Ở bước này, ta lọc ghi áp dụng điều kiện C liên quan đến Ti Việc loại bỏ ghi bước giúp giảm số lượng ghi tham gia vào phép nối B2 B2 Nối tập dTinew thu với bảng lại F (ngoại trừ Ti), thu kết dQi B3 Loại từ dQi ghi khơng thoả C B4 Nhóm ghi dQitheo G, chọn cột tương ứng tham gia vào S, thực biểu thức cho nhóm theo G cập nhật bảng KNT Tmv cho ghi thu theo nguyên tắc: - Nếu chưa có ghi dạng (G, S\G), thêm ghi 18 - SUM(E) = SUM(E) + dSUMnew(E) Trong đó, E biểu thức dSUMnew(E) SUM(E) dQi - COUNT(E) = COUNT(E) + dCOUNTnew(E) dCOUNTnew(E) COUNT(E) dQi - Nếu MIN(E) > dMINnew(E), nghĩa ghi thêm tạo nên giá trị MIN(E) cho nhóm, MIN(E) = dMINnew(E) Ngược lại, MIN(E) không thay đổi dMINnew(E) MIN(E) dQi - Nếu MAX(E) < dMAXnew(E), nghĩa ghi thêm tạo nên giá trị MAX(E) cho nhóm, MAX(E) = dMAXnew(E) Ngược lại, MAX(E) khơng thay đổi dMAXnew(E) MAX(E) dQi - Thay lưu AVG(E), ta lưu SUM(E) COUNT(E) Khi xuất truy vấn có AVG(E), ta tính AVG(E) từ SUM(E)/COUNT(E) Sự kiện delete tập ghi dTiold từ bảng Ti B1 Loại từ dTiold ghi không thoả C B2 Nối tập dTiold với bảng lại, thu kết dQi B3 Loại từ dQi ghi không thoả C B4 Nhóm ghi dQi theo G, chọn cột tương ứng tham gia vào S, thực biểu thức cho nhóm theo G cập nhật bảng KNT Tmv cho ghi thu theo nguyên tắc: - SUM(E) = SUM(E) - dSUMold(E) dSUMnew(E) SUM(E) dQi - COUNT(E) = COUNT(E) dCOUNTold(E) dCOUNTold (E) COUNT(E) dQi - Nếu MIN(E) = dMINold(E), nghĩa ghi xoá tạo nên giá trị MIN(E) nhóm, ta tính lại MIN(E) dựa BG Ngược lại, MIN(E) không thay đổi - Nếu MAX(E) = dMAXold(E), nghĩa ghi xố tạo nên giá trị MAX(E), ta tính lại MAX(E) dựa BG Ngược lại, MAX(E) không thay đổi - Nếu có COUNT(*) = 0, nghĩa khơng cịn ghi thuộc nhóm tham gia vào kết truy vấn, xoá ghi dạng (G, S\G) từ Tmv Sự kiện update tập ghi dTi bảng Ti 19 Khi phân tách kiện update thành hai kiện delete sau insert, hiểu: Update dTi = delete dTiold + insert dTinew B1 So sánh dTiold dTinew, loại khỏi dTiold dTinew ghi có điều chỉnh liệu khơng liên quan đến Q B2 Thực trường hợp delete với dTiold B3 Thực trường hợp insert với dTinew 2.4 Kết chƣơng Trong phần này, nghiên cứu thuật toán chuyển từ truy vấn lồng sang truy vấn nối trong, trình bày khung nhìn thực PostgreSQL, phương pháp cập nhật khung nhìn thực, đưa điều kiện để triển khai thuật toán cập nhật gia tăng trình bày thuật tốn cập nhật gia tăng khung nhìn thực với truy vấn nối 20 CHƢƠNG XÂY DỰNG CHƢƠNG TRÌNH SINH TỰ ĐỘNG MÃ NGUỒN CÁC TRIGGER THỰC HIỆN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC VỚI TRUY VẤN LỒNG 3.1 Cài đặt mơi trƣờng CSDL ngơn ngữ lập trình Module sinh tự động mã nguồn trigger thực cập nhật gia tăng KNT nối ngồi viết ngơn ngữ C visual studio 12.0, biên dịch file chạy exe có giao diện console Cấu hình u cầu cài đặt sau: Máy sử dụng phải cài đặt hệ quản trị sở liệu PostgeSQL 10 3.2 Xây dựng mô-đun sinh mã tự động trigger 3.2.1 Tạo sở liệu thực nghiệm Từ thư mục lưu file QLSV.sql, ta mở file chương trình notepad, copy toàn nội dung file Khởi động PostgreSQL chọn sở liệu, chọn Execute arbitrary SQL queries Tool bar, chép toàn nội dung vừa copy vào cửa sổ SQL Editor Sau thực thi lệnh Execute query, bảng bao gồm: KHOA, LOP, SV cài đặt hệ quản trị sở liệu PostgreSQL 3.2.2 Chương trình sinh tự động mã trigger 3.2.2.1 Mã cố định - Khai báo thư viện - Khai báo biến điều khiển - Thực thi thủ tục, macro quy ước khai báo hàm ngôn ngữ C chạy PostgreSQL (kiểm tra lời gọi hàm, dòng liệu NULL, giá trị trả về…) - Kết nối/ngắt kết nối đến SPI 3.2.2.2 Mã tùy biến 3.2.3 Sử dụng kết chương trình sinh mã Để sử dụng chương trình sinh mã, cần thực công đoạn sau theo thứ tự: Biên dịch file mã nguồn (*.c) thành dạng thư viện chia sẻ (shared library) với phần mở rộng tương ứng *.dll (trên hệ điều hành Windows) *.so (trên hệ điều hành Linux) 21 Copy tệp *.dll *.so thu sau biên dịch mã nguồn vào thư mục lib thư mục cài đặt PostgreSQL Truy cập CSDL, chạy đoạn mã script file *.sql để tạo KNT cài đặt trigger lên BG Thử nghiệm, kiểm tra 3.2.4 Đánh giá kết thực nghiệm 3.2.4.1 Chương trình sản phẩm Chương trình sinh tự động mã nguồn trigger ngôn ngữ C phục vụ cập nhật gia tăng, đồng KNT với truy vấn lồng SQL viết ngơn ngữ C với giao diện Console Hình 3.1 Ví dụ liệu đầu vào Hình 3.2 Giao diện chương trình sinh mã Về mã nguồn sinh ra, xem phụ lục [2] 3.2.4.2 Đ nh gi tốc độ cập nhật liệu c c BG có trigger cập nhật KNT TVG thay câu lệnh select đơn giản truy vấn đến bảng KNT nên tốc độ thực TVG xem đạt đến mức tối đa Tuy vậy, BG, trigger cập nhật gia tăng đồng cho KNT làm cho thao tác cập nhật KNT trở thành phần trình cập nhật liệu BG, cho nên, thao tác cập nhật liệu BG bị chậm tỉ lệ thuận với khối lượng 22 liệu BG, độ phức tạp TVG số lượng KNT sử dụng Phần đánh giá giúp ước lượng phần thời gian bị chậm cập nhật liệu BG có trigger cập nhật KNT Thử nghiệm nhằm đánh giá hiệu ảnh hưởng trigger sinh ra, thực máy tính cá nhân có cấu hình CPUcấu hình Intel G4600 4x3.6Ghz, Ram GB, hệ điều hành Windows 10 64bit, HQT CSDL PostgreSQL 10 64bit Sau tiến hành đo đạc thời gian thực thi truy vấn, thao tác liệu ba trường hợp:i) Khơng có KNT,ii) có KNT – trigger CNGT KNT theo thuật tốn trình bày mục 1.4.3.2.b Thử nghiệm cho trường hợp i) ii) ghi ngẫu nhiên tính giá trị trung bình, thu kết so sánh bảng thông qua công cụ quản trị CSDL pgAdminIII 1.18.1 Mỗi thử nghiệm thao tác liệu thực 20 lần tính kết lần 11-20 với giả định thao tác HQT CSDL thực thi “ổn định” sau số thử nghiệm, cụ thể 10  TVG: SELECT sinh_vien.ma_sv, sinh_vien.ten_sv, sinh_vien.que_quan, lop.ma_lop, lop.ten_lop, khoa.ma_khoa,khoa.ten_khoa FROM sinh_vien JOIN lop ON sinh_vien.ma_lop = lop.ma_lop JOIN khoa ON lop.ma_khoa = khoa.ma_khoa  Đánh giá thời gian thực thi câu lệnh Select: Đối với lệnh Select: Thời gian thực thi khơng dùng KNT trung bình dao động từ 250-280 ms; thời gian thực thi có dùng KNT trung bình dao động từ 50-65ms  Đánh giá thời gian thực thi thao tác cập nhật BG: Đối với lệnh insert/delete (1 row): Thời gian thực thi khơng có trigger trung bình dao động từ 60-70 ms; thời gian thực thi có trigger cập nhật KNT trung bình dao động từ 7085ms Đối với lệnh update (1000 row): Thời gian thực thi khơng có trigger trung bình dao động từ 290-330 ms; thời 23 gian thực thi có trigger cập nhật KNT trung bình dao động từ 340-370 ms Qua đánh giá cho thấy rõ hiệu việc sử dụng KNT truy vấn đủ phức tạp lượng liệu lớn, đặc biệt trường hợp tần suất sử dụng truy vấn cao tần suất cập nhật liệu lệnh insert, update, delete thấp hiệu nhân lên gấp bội 3.3 Kết chƣơng Trong chương này, luận văn trình bày trình xây dựng module sinh tự động mã nguồn trigger thực cập nhật gia tăng khung nhìn thực cho kiện thêm mới, xóa, cập nhật bảng sở Từ xây dựng chương trình sinh tự động mã nguồn trigger ngơn ngữ C Chúng tơi cịn đưa số hình ảnh chạy chương trình cách cài đặt chương trình, đánh giá tốc độ thực thi câu lệnh 24 KẾT LUẬN VÀ KIẾN NGHỊ THẢO LUẬN MỘT SỐ KẾT QUẢ ĐẠT ĐƯỢC Luận văn trình bày kết nghiên cứu khung nhìn thực truy vấn lồng, để cập nhật gia tăng khung nhìn thực truy vấn lồng Hệ quản trị CSDL PostgreSQL ngôn ngữ C Qua đó, chúng tơi trình bày tổng quan nghiên cứu liên quan đến khung nhìn thực, phương pháp để cập nhật gia tăng Kết luận văn này, xây dựng module hỗ trợ sinh mã tự động trigger thực cập nhật gia tăng bảng khung nhìn thực truy vấn lồng đơn giản liên quan đến truy vấn INSERT, UPDATE, DELETE GIỚI HẠN CỦA LUẬN VĂN NÀY Trong trình thực luận văn, dù em cố gắng nhiều hạn chế thời gian, kiến thức kinh nghiệm lĩnh vực nên luận văn khơng thể tránh khỏi thiếu sót, mong nhận đóng góp chân thành giúp đỡ quý thầy cô để luận văn tốt nghiệp em hoàn thiện - Khối lượng liệu nhỏ nên hiệu việc thực cập nhật gia tăng khung nhìn thực chưa thể rõ - Luận văn dừng lại cập nhật gia tăng cho khung nhìn thực truy vấn lồng đơn giản ĐỀ XUẤT HƯỚNG NGHIÊN CỨU TIẾP THEO - Chương trình phát triển cho khung nhìn thực nối ngồi dựa thuật tốn trình bày - Tự động hóa q trình cài đặt khung nhìn thực CSDL ... tơi chọn đề tài ? ?Xây dựng mô- đun sinh tự động mã nguồn trigger ngôn ngữ C ph? ?c vụ c? ??p nhật gia tăng, đồng khung nhìn th? ?c với truy vấn lồng cho PostgreSQL? ?? làm khóa luận tốt nghiệp cao h? ?c M? ?c. .. ngơn ngữ C làm mã nguồn cho trigger xây dựng mô- đun để sinh tự động trigger cho tất BG tham gia vào truy vấn, ph? ?c vụ th? ?c CNGT KNT chế đồng bộ, phần giao t? ?c th? ?c thao t? ?c liệu BG Đã c? ? nghiên c? ??u... nhiệm vụ đề tài 2.1 M? ?c tiêu Xây dựng chương trình sinh tự động mã nguồn trigger ngôn ngữ C ph? ?c vụ c? ??p nhật gia tăng, đồng khung nhìn th? ?c với truy vấn lồng PostgreSQL Chương trình c? ? khả sinh mã

Ngày đăng: 05/05/2021, 16:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w