Xây dựng chương trình sinh tự động mã các trigger thực hiện cập nhật gia tăng các bảng khung nhìn thực nối ngoài
Khung nhìn thực là một đối tượng cơ sở dữ liệu chứa các kết quả của một truy vấn, giúp trả lời các truy vấn nhanh chóng thay vì lấy dữ liệu từ các bảng gốc và xử lý. Trong kho dữ liệu, dữ liệu biên niên sử ở các hệ thống ngân hàng, bán lẻ và thanh toán; trong các ứng dụng ảo hóa; trong các hệ thống di động; kiểm soát các ràng buộc toàn vẹn; tối ưu hoá truy vấn, hiệu quả việc sử dụng KNT được thể hiện rõ hơn.
Một ví dụ điển hình về tính hiệu quả của việc ứng dụng KNT. Một tập đoàn có nhiều đại diện tại nhiều vùng thuộc nhiều quốc gia cung cấp cho nhiều khách hàng khác nhau một số lượng lớn các sản phẩm. Như vậy, CSDL trung tâm của tập đoàn này có thể chứa hàng triệu hoặc nhiều hơn các dòng dữ liệu về chi tiết bán hàng. Bây giờ, người ta cần thống kê số lượng sản phẩm được bán cũng như tổng doanh thu cho từng loại sản phẩm tại mỗi vùng theo quốc gia. Truy vấn được thực thi và kết quả được trả lại sau một khoảng một thời gian T1 nào đó. Kết quả này được lưu lại trong một bảng – KNT bao gồm 200 dòng dữ liệu. Sau này, mỗi khi xuất hiện truy vấn đó, thay vì thực thi lại từ đầu bằng việc quét và xử lý hàng triệu dòng dữ liệu, HQT CSDL đọc bảng KNT chứa chỉ 200 dòng dữ liệu và trả lại kết quả trong khoảng thời gian T2 (thường rất nhỏ so với T1), thường là vài ms. Thậm chí, KNT có thể được dùng để trả lời các truy vấn tương tự nhưng cho trường hợp cả thế giới, hoặc một vài vùng nào đó, hoặc trường hợp chỉ cần tính hoặc doanh thu hoặc số lượng sản phẩm. Tính năng này được gọi là viết lại truy vấn (query rewrite) [4].
Tuy nhiên, KNT không cho phép nâng cao năng suất trong tất cả các trường hợp, hiệu quả ứng dụng chúng có thể giảm đi rõ rệt nếu thường xuyên xảy ra thay đổi dữ liệu trong các bảng gốc sử dụng để tạo KNT (hay KNT sử dụng).
Khung nhìn thực được ứng dụng từ những năm 1980, tuy nhiên đến nay chỉ có 3 HQTCSDL hàng đầu thế giới là Oracle, IBM DB2 và MS SQL Server triển khai thành công. Còn đối với những HQTCSDL khác, nhất là HQTCSDL mã nguồn mở như PostgeSQL thì khó khăn được xác định là ở bước thực hiện cập nhật gia tăng cho KNT. Trước đó đã có những nghiên cứu về việc sử dụng trigger mã nguồn PL/pgSQL để cập nhật gia tăng đồng bộ KNT trong PostgreSQL, nhưng chỉ dừng lại ở KNT kiểu SPJ (Select – Project – Join), là KNT dựa trên truy vấn chỉ chứa phép chọn, phép chiếu và phép nối trong, không bao gồm các phép toán thống kê như SUM, COUNT, AVG, MIN, MAX,… Tuy nhiên, mã nguồn PL/pgSQL được đánh giá là có hiệu năng chưa cao ở một số xử lý (ví dụ như xử lý vòng lặp).
PostgreSQL được viết hoàn toàn bằng ngôn ngữ C, có các cấu trúc dữ liệu trong C tương ứng với các kiểu dữ liệu trong SQL và một giao diện lập trình giúp cho hàm trigger có thể thực hiện truy vấn đến CSDL được dễ dàng. Vì vậy, việc thực thi phần mở rộng PostgreSQL thực sự nhanh hơn khó có thể đạt được bằng cách sử dụng bất cứ ngôn ngữ gì khác ngoài C. Viết mã bằng ngôn ngữ C có thể không phải là cách nhanh nhất của việc thực thi các tính năng, nhưng việc thực hiện các hàm sẽ không bị ảnh hưởng nhiều mà các ngôn ngữ lập trình khác gây ra.
Xuất phát từ những lý do trên, tôi đề xuất chọn đề tài luận văn tốt nghiệp thạc sỹ ngành khoa học máy tính: “Xây dựng chương trình sinh tự động mã các trigger thực hiện cập nhật gia tăng các bảng khung nhìn thực nối ngoài”.
Mục tiêu chung của đề tài là: Xây dựng chương trình sinh tự động mã các trigger thực hiện cập nhật gia tăng các bảng khung nhìn thực nối ngoài nhằm làm tăng tốc độ thực thi các truy vấn.
Để đạt được mục tiêu chung đó, tác giả nghiên cứu các mục tiêu cụ thể như sau:
– Nghiên cứu tổng quan về KNT.
– Nghiên cứu cơ sở lý thuyết về cập nhật gia tăng, đồng bộ KNT nối ngoài.
– Nghiên cứu tổng quan về trigger trên C trong PostgreSQL.
– Xây dựng thuật toán cập nhật gia tăng KNT nối ngoài.
– Xây dựng module sinh mã tự động các trigger.
3.1. Đối tượng nghiên cứu
– Khung nhìn thực
– Trigger
3.2. Phạm vi nghiên cứu
– Cập nhật gia tăng, đồng bộ khung nhìn thực nối ngoài.
– Hệ quản trị cơ sở dữ liệu PostgreSQL.
– Trigger trong ngôn ngữ C.
4.1. Phương pháp lý thuyết
Thu thập, chọn lọc, phân loại, ghi chú và nghiên cứu các tài liệu (sách, bài 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 bộ KNT, sinh mã trigger trong ngôn ngữ C.

4.2. Phương pháp thực nghiệm
Dựa trên lý thuyết đã nghiên cứu, tiến hành xây dựng chương trình sinh tự động mã các trigger thực hiện cập nhật gia tăng khung nhìn thực nối ngoài trong hệ cơ sở dữ liệu PostgreSQL; thử nghiệm trên máy đơn và đánh giá tốc độ cập nhật dữ liệu trên các BG có trigger cập nhật KNT.
5.1. Ý nghĩa khoa học
5.2. Ý nghĩa thực tiễn
Ngoài phần mở đầu và kết luận, cấu trúc nội dung của luận văn bao gồm 3 chương:
Chương 1: Tổng quan nghiên cứu, chương này giới thiệu tổng quan về KNT; cập nhật gia tăng, đồng bộ KNT. Trình bày các vấn đề liên quan đến trigger trên C trong PostgreSQL.
Chương 2: Cập nhật gia tăng khung nhìn thực nối ngoài, chương này trình bày thuật toán cập nhật gia tăng KNT nối ngoài; xây dựng thuật toán sinh tự động mã nguồn các trigger.
Chương 3: 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 nối ngoài, chương này trình bày giao diện chương trình đã được xây dựng; đánh giá kết quả đạt được.
1.1. TỔNG QUAN VỀ KHUNG NHÌN THỰC
Một khung nhìn có thể được cụ thể hóa bằng cách lưu trữ các bộ dữ liệu của các khung nhìn trong cơ sở dữ liệu, được gọi là khung nhìn thực. KNT là hiện thân tự nhiên của ý tưởng tính toán lại và bộ nhớ đệm trong cơ sở dữ liệu. Thay vì tính toán một truy vấn từ đầu từ dữ liệu cơ bản, hệ thống cơ sở dữ liệu có thể sử dụng kết quả đã được tính toán, lưu trữ và duy trì.
Giống như một bộ nhớ cache (bộ nhớ đệm – nơi lưu trữ các dữ liệu nằm chờ các ứng dụng hay phần cứng xử lý), một KNT cung cấp truy cập dữ liệu nhanh; sự khác biệt tốc độ có thể là rất quan trọng trong các ứng dụng mà tốc độ truy vấn cao và khung nhìn rất phức tạp rằng nó không thể tính toán lại khung nhìn cho mỗi lần truy vấn. KNT là hữu ích trong các ứng dụng như kho dữ liệu, máy chủ sao chép, biên niên sử hoặc các hệ thống ghi dữ liệu, trực quan dữ liệu và hệ thống điện thoại di động. Kiểm tra tính ràng buộc toàn vẹn và tối ưu hóa truy vấn cũng có thể được lợi ích từ KNT [5, tr.1].
Tuy nhiên, việc sử dụng KNT cũng có những nhược điểm; đó là: KNT làm tiêu tốn không gian lưu trữ và phải được cập nhật khi các bảng chi tiết cơ bản được sửa đổi.
1.1.2. Phân loại khung nhìn thực
a. KNT bản sao (snapshot materialized view)
b. KNT hăm hở (eager materialized view)
c. KNT rất lười (very lazy materialized view)
d. KNT lười (lazy materialized view)
1.2. TỔNG QUAN VỀ CẬP NHẬT GIA TĂNG, ĐỒNG BỘ KHUNG NHÌN THỰC
1.2.1. Tổng quan về cập nhật gia tăng
Có ba phương pháp cập nhật KNT, đó là hoàn toàn (COMPLETE), gia tăng (FAST hay còn gọi là INCREMENTAL) và ép buộc (FORCE)
Để duy trì các bảng KNT trong trạng thái thực tiễn, cần phải cập nhật chúng mỗi khi có sự thay đổi dữ liệu trong các bảng gốc. Phụ thuộc vào thời hạn đưa các thay đổi vào các bảng KNT, các cơ chế cập nhật được phân ra đồng bộ và không đồng bộ.
1.2.2. Đồng bộ khung nhìn thực
Cập nhật đồng bộ được thực thi không chậm trễ ngay khi có thay đổi dữ liệu trong bảng gốc như một phần của giao tác thực hiện thay đổi đó. Ngược lại, cập nhật không đồng bộ được thực hiện vào một thời điểm nào đó sau khi các giao tác sửa đổi dữ liệu trong bảng gốc đã được cố định. Cập nhật không đồng bộ khai thác thời gian trì hoãn cho phép trong cập nhật dữ liệu được xác định bởi công nghệ xử lý dữ liệu trong các hệ thống thông tin và ý nghĩa của các bài toán giải quyết trong đó [3].
1.3. CẬP NHẬT KHUNG NHÌN THỰC BẰNG TRIGGER TRÊN C TRONG POSTGRESQL
Trigger là một thủ tục đặc biệt mà việc thực thi của nó tự động khi có sự kiện xảy ra, các sự kiện gọi thủ tục đặc biệt này được định nghĩa trong câu lệnh, thông thường được thực hiện với các sự kiện liên quan đến Insert, Update, Delete dữ liệu. Trigger được sử dụng trong việc bảo đảm toàn vẹn dữ liệu theo quy tắc xác định, được quản lý theo bảng dữ liệu hoặc khung nhìn.
1.3.2. Thủ tục tạo trigger bằng ngôn ngữ C trong HQT CSDL PostgreSQL
1.3.3. Ví dụ tạo trigger trên C trong PostgreSQL
1.4. MỞ RỘNG POSTGRESQL VỚI HÀM TÙY CHỌN
1.4.2. Hàm sử dụng ngôn ngữ lập trình C
1.5. TIỂU KẾT CHƯƠNG 1
Trong phần này, chúng ta đã tập trung trình bày tổng quan về các vấn đề về khung nhìn thực, phương pháp tạo khung nhìn thực và phân loại theo cấu trúc các loại khung nhìn thực trong các HQT CSDL. Ngoài ra, chúng tôi cũng đã trình bày tổng quan về cập nhật gia tăng trong các HQT CSDL và khái niệm về đồng bộ khung nhìn thực. Cuối chương 1, chúng tôi cũng đã đi nghiên cứu các vấn đề về trigger, phương pháp tạo trigger trên C trong PostgreSQL và đã trình bày một ví dụ bằng chính ngôn ngữ C cho phép tạo trigger. Phần tiếp theo của luận văn này, chúng tôi sẽ đi nghiên cứu các giải thuật cập nhật gia tăng khung nhìn thực nối ngoài.
F:\DỮ LIỆU COP CỦA CHỊ YẾN\DAI HOC DA NANG\LUAN VAN 2015\KHOA HOC MAY TINH\TRAN NGOC HIEN LE


