Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
570,78 KB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC ▬▬▬▬▬ KHĨA LUẬN TỐT NGHIỆP CHUN NGÀNH: CƠNG NGHỆ THÔNG TIN CẬP NHẬT GIA TĂNG BẤT ĐỒNG BỘ KHUNG NHÌN THỰC TRONG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU POSTGRESQL GIẢNG VIÊN HƯỚNG DẪN : TS Nguyễn Trần Quốc Vinh SINH VIÊN THỰC HIỆN : Trần Trọng Nhân MSSV : 312022111153 NIÊN KHÓA : 2011 – 2015 Đà Nẵng – Năm 2015 i LỜI CAM ĐOAN Tôi xin cam đoan: • Những nội dung luận văn tốt nghiệp thực hướng dẫn trực tiếp giảng viên hướng dẫn • Mọi tham khảo dùng luận văn trích dẫn rõ ràng tên tác giả, tên cơng trình, thời gian địa điểm công bố Sinh viên thực Trần Trọng Nhân ii LỜI CẢM ƠN Tôi xin gửi lời cảm ơn đến Ban lãnh đạo nhà trường, khoa Tin học – Trường Đại học Sư phạm Đà Nẵng, tạo điều kiện cho thực khóa luận tốt nghiệp Xin cảm ơn thầy giảng viên nhiệt tình dạy dỗ bốn năm ngồi ghế giảng đường Đặc biệt thầy Nguyễn Trần Quốc Vinh, người trực tiếp hướng dẫn thực khóa luận tốt nghiệp Mặc dù cố gắng hoàn thiện đề tài với tất nỗ lực thân song chắn không tránh khỏi thiếu sót, mong nhận đóng góp ý kiến thầy cô bạn Cuối cùng, tơi xin kính chúc q thầy lời chúc sức khoẻ, hạnh phúc thành công công tác sống Xin trân trọng cảm ơn! Sinh viên thực Trần Trọng Nhân iii NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… ………………………………………………………………………………… Đà Nẵng, ngày tháng năm 2015 Chữ ký GVHD iv MỤC LỤC DANH MỤC VIẾT TẮT vi DANH MỤC HÌNH VẼ vii DANH MỤC BẢNG BIỂU viii MỞ ĐẦU 1 Lý chọn đề tài Mục tiêu nghiên cứu Đối tượng phạm vi nghiên cứu Kết cấu đề tài CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 KHUNG NHÌN THỰC 1.2 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU POSTGRESQL 1.3 GIỚI THIỆU VỀ TRIGGER NGÔN NGỮ C TRONG POSTGRESQL 1.3.1 Hàm nạp động 1.3.2 Trigger sử dụng hàm nạp động .8 1.4 SINH TỰ ĐỘNG MÃ NGUỒN TRIGGER NGÔN NGỮ C 1.4.1 Mã cố định 1.4.2 Mã tùy biến .9 1.5 THUẬT TOÁN CẬP NHẬT GIA TĂNG KHUNG NHÌN THỰC 13 1.5.1 Tạo khung nhìn thực .14 1.5.2 Thực cập nhật 15 1.5.3 Thuật toán cải tiến cho số trường hợp 18 CHƯƠNG PHÂN TÍCH VÀ THIẾT KẾ 21 2.1 MƠ HÌNH TỔNG QUAN HỆ THỐNG 21 2.2 PHÂN TÍCH THƠNG TIN 22 2.2.1 Phân tích thơng tin đầu vào 22 2.2.2 Phân tích siêu liệu (meta-data) 23 2.2.3 Phân tích tiền xử lý thành phần liên quan mã nguồn C .24 2.2.4 Phân tích liệu điều kiện đối chiếu thuật toán 25 2.3 QUẢN LÝ CẬP NHẬT BẤT ĐỒNG BỘ .25 v 2.4 SINH TỰ ĐỘNG CÁC ĐƠN VỊ QUẢN LÝ 26 2.4.1 Sinh tự động bảng 26 2.4.2 Sinh tự động trigger biên sử 27 2.5 TỐI ƯU HÓA LỊCH SỬ CẬP NHẬT .27 2.5.1 Thuật toán tối ưu hóa lịch sử cập nhật 27 2.5.2 Các trường hợp lược bỏ thay lưu .30 2.6 CẬP NHẬT GIA TĂNG BẤT ĐỒNG BỘ KHUNG NHÌN THỰC .31 2.6.1 Sự kiện thêm 32 2.6.2 Sự kiện xóa 32 2.6.3 Sự kiện cập nhật 33 CHƯƠNG CÀI ĐẶT CHƯƠNG TRÌNH VÀ THỬ NGHIỆM .35 3.1 MÔ-ĐUN SINH TỰ ĐỘNG SCHEMA QUẢN LÝ CẬP NHẬT BẤT ĐỒNG BỘ KHUNG NHÌN THỰC VÀ TRIGGER BIÊN SỬ 35 3.2 BỘ CẤU HÌNH BIÊN DỊCH MÃ NGUỒN C TRÊN HỆ ĐIỀU HÀNH WINDOWS 36 3.3 MÔ-ĐUN CẬP NHẬT GIA TĂNG BẤT ĐỒNG BỘ KHUNG NHÌN THỰC 38 3.4 ĐÁNH GIÁ HIỆU SUẤT 39 3.4.1 Truy vấn gốc thử nghiệm 39 3.4.2 Cấu trúc kích thước bảng gốc 40 3.4.3 Hiệu đạt sử dụng KNT 41 3.4.4 Thời gian chạy trigger 41 3.4.5 Thời gian cập nhật gia tăng bất đồng khung nhìn thực 42 KẾT LUẬN 43 TÀI LIỆU THAM KHẢO 44 PHỤ LỤC A: MÃ NGUỒN TRIGGER BIÊN SỬ ĐƯỢC SINH TỰ ĐỘNG 45 PHỤ LỤC B: KỊCH BẢN SQL CHO TRIGGER TRÊN CÁC BẢNG GỐC 49 vi DANH MỤC VIẾT TẮT HQT Hệ quản trị CSDL Cơ sở liệu CNGT Cập nhật gia tăng KNT Khung nhìn thực BG Bảng gốc TVG Truy vấn gốc vii DANH MỤC HÌNH VẼ Hình 2.1 – Sơ đồ tổng quan hoạt động hệ thống 21 Hình 2.2 – Phân tích thơng tin đầu vào 22 Hình 2.3 – Phân tích siêu liệu 23 Hình 2.4 – Phân tích tiền xử lý C 24 Hình 2.5 – Phân tích liệu điều kiện đối chiếu thuật toán 25 Hình 2.6 – Sơ đồ khối thuật tốn tổng quan tối ưu hóa lưu 29 viii DANH MỤC BẢNG BIỂU Bảng 1.1 – Giới hạn khả HQT CSDL PostgreSQL Bảng 3.1 – Kích thước bảng gốc tham gia vào truy vấn 41 Bảng 3.2 – Hiệu sử dụng KNT 41 Bảng 3.3 – Thời gian chạy trigger 41 Bảng 3.4 – Thời gian cập nhật gia tăng bất đồng khung nhìn thực 42 MỞ ĐẦU Lý chọn đề tài Sử dụng khung nhìn thực (KNT) cách nhanh để thực lệnh truy vấn, nói KNT cho kết tức thời độ phức tạp truy vấn độ lớn sở liệu (CSDL) Để sử dụng, KNT phải trạng thái cập nhật (thực tiễn), liệu bảng gốc (BG – bảng tham gia vào truy vấn gốc – truy vấn tạo KNT) thay đổi liên tục theo thời gian nên kết truy vấn thay đổi theo, dẫn đến liệu KNT bị hết hạn (khơng cịn thực tiễn), khả trả lời truy vấn cách xác Lý tưởng việc cập nhật (thực tiễn hóa) KNT ln diễn liên tục, nhằm đáp ứng nhu cầu truy vấn kết với tần suất cao Cơ chế cập nhật gia tăng đồng KNT trigger cho hệ quản trị (HQT) CSDL PostgreSQL cơng trình nghiên cứu [2] cho phép cho phép thực việc đó, xem việc cập nhật KNT phần thao tác thực cập nhật liệu BG Tuy vậy, số trường hợp tùy thuộc vào đặc thù vấn đề đưa cách thức khai thác liệu, KNT không cần phải luôn sẵn sàng Chẳng hạn khai báo thêm điểm mơn học cho sinh viên không gây thay đổi đáng kể đến điểm trung bình cho tồn khoa, tồn ngành; bán thêm vài hàng khơng ảnh hưởng đến doanh thu tồn cầu, châu lục, vùng hay chí doanh thu theo quốc gia [1] Khi đó, trì hoãn cập nhật KNT khoảng thời gian kể từ liệu thay đổi thời điểm định đó, thời điểm KNT chuẩn bị sử dụng Xuất từ năm 1980, đến thời điểm tại, KNT hỗ trợ hoàn toàn số HQT CSDL lớn Microsoft SQL Server, Oracle DB2,… Còn HQT CSDL mã nguồn mở, KNT chưa phát 35 CHƯƠNG CÀI ĐẶT CHƯƠNG TRÌNH VÀ THỬ NGHIỆM Chương trình cập nhật gia tăng bất đồng khung nhìn thực lập trình dạng ứng dụng console, viết ngơn ngữ C nên có khả tích hợp vào HQT CSDL PostgreSQL mô-đun chức Trên hệ điều hành Windows, chương trình tổ chức thành hai mô-đun riêng biệt dạng hai tệp thực thi exe, kèm project cấu hình mơi trường để biên dịch mã nguồn ngơn ngữ C thành tệp thư viện động dll môi trường hệ điều hành Windows chứa hàm trigger 3.1 MÔ-ĐUN SINH TỰ ĐỘNG SCHEMA QUẢN LÝ CẬP NHẬT BẤT ĐỒNG BỘ KHUNG NHÌN THỰC VÀ TRIGGER BIÊN SỬ Bộ thơng tin đầu vào mơ-đun chương trình là: lệnh TVG, tên CSDL, thông tin đăng nhập tên người dùng sở hữu, cổng mật Tiếp theo tên KNT CSDL, thư mục chứa output thư mục cài đặt gốc thể HQT CSDL PostgreSQL sử dụng Đầu mô-đun chương trình bao gồm: tệp mã nguồn C chứa hàm trigger tệp header khai báo phụ thuộc cần dùng tệp mã nguồn C Tác dụng thêm mơ-đun chương trình chạy sinh tự động (nếu chưa có) cập nhật schema chứa bảng quản lý thông tin cập nhật bất đồng KNT CSDL Cùng với đó, bảng biên sử (log tables) tạo (nếu chưa có) tương ứng với BG tham gia vào TVG 36 3.2 BỘ CẤU HÌNH BIÊN DỊCH MÃ NGUỒN C TRÊN HỆ ĐIỀU HÀNH WINDOWS Project biên dịch mã cung cấp xây dựng mơi trường Visual Studio để biên dịch mã nguồn thành tệp *.dll hệ điều hành Windows cách tiện lợi, cung cấp tệp mã nguồn viết nhằm hỗ trợ cho việc sử dụng sinh tự động trigger dễ dàng Môi trường biên dịch mã cấu sau (áp dụng chương trình Visual Studio phiên từ 2008 đến 2013): - Mở cửa sổ Project properties (click chuột phải vào tên project chọn properties) - Ở mục General phần Configuration type chọn Dynamic Library (.dll) - Ở mục C/C++ phần General, đặt đường dẫn thư viện vào ô Additional Include Directories theo thứ tự: \PostgreSQL\\include\server\port\win32_msvc \PostgreSQL\\include\server\port\win32 \PostgreSQL\\include\server \PostgreSQL\\include - Ở mục C/C++ phần Code Generation, chọn option No ô Enable C++ Exceptions - Ở mục C/C++ phần Advanced, chọn option Compile as C Code (/TC) ô Compile as - Ở mục Linker phần General, đặt đường dẫn sau vào ô Additional Library Directories: \PostgreSQL\\lib 37 - Ở mục Linker phần General, chọn option No ô Link Library Dependencies - Ở mục Linker phần Input, đặt giá trị postgres.lib cho ô Additional Dependencies - Ở mục Linker phần Manifest File, chọn option No ô Generate Manifest Như nói trên, dự án biên dịch cung cấp tệp header định nghĩa macros đặt quy ước mã (coding conventions) cho dự án sinh mã nhằm mục đích phát triển sau cách dễ dàng mục đích khác, cụ thể: - Đơn giản hóa q trình sinh mã - Cung cấp giao diện lập trình (API) mức cao, dễ hiểu mặt ngữ nghĩa - Tăng tốc độ tự viết mã phục vụ cho lập trình viên muốn tự viết trigger ngôn ngữ C Các macro (nằm file ctrigger.h, tạo kèm theo mã nguồn C trigger từ project sinh mã) bao gồm: - Bộ giá trị số, chuỗi (constant) - Bộ định nghĩa cấu trúc thân hàm trigger - Bộ điều khiển kết nối - Bộ debug/ghi log - Bộ chuyển đổi kiểu liệu - Bộ truy vấn CSDL - Bộ trích xuất liệu từ dịng liệu trigger - Bộ trích xuất liệu từ dòng liệu update - Bộ thiết lập nhớ cache lưu kết truy vấn - Bộ short-hand để làm việc với kiểu liệu chuỗi - Bộ kiểm tra thời điểm, kiện gọi trigger 38 - Bộ validate liệu truy vấn - Bộ lệnh dùng chế cải tiến từ thuật toán cập nhật gia tăng khung nhìn thực Các macro góp phần lớn việc đơn giản hóa q trình sinh mã việc lập trình thủ cơng trigger ngơn ngữ C Tệp header đặt lọc Header Files, ta đặt mã nguồn C trigger lọc Source Files project, sau chọn Build mã nguồn C biên dịch thành thư viện DLL, tạo thư mục Debug/Release tùy vào cấu hình project Bước sau có tệp thư viện DLL, ta đặt thư viện vào thư mục \lib thư mục cài đặt PostgreSQL máy tính (thường nằm thư mục C:\Program Files\PostgreSQL\) Chạy mã kịch SQL sinh với tệp mã nguồn C Query Analyzer chương trình PgAdmin HQT CSDL PostgreSQL để khai báo trigger cho BG liên quan 3.3 MÔ-ĐUN CẬP NHẬT GIA TĂNG BẤT ĐỒNG BỘ KHUNG NHÌN THỰC Bộ thơng tin đầu vào mơ-đun chương trình là: tên KNT cần cập nhật, tên CSDL, thông tin đăng nhập tên người dùng sở hữu, cổng mật khẩu, cuối thư mục cài đặt gốc thể HQT CSDL PostgreSQL sử dụng Mơ-đun chương trình thực đọc thông tin lịch sử thay đổi liệu, từ CNGT bảng KNT Dữ liệu bảng schema quản lý cập nhật lại sau chương trình thực thành cơng 39 3.4 ĐÁNH GIÁ HIỆU SUẤT Khi sử dụng KNT, tốc độ thực truy vấn xem đạt đến mức tối đa truy vấn thay câu lệnh SELECT đơn giản đến bảng KNT Tuy vậy, trigger biên sử cài đặt BG để lưu lại thơng tin có thay đổi (phục vụ cập nhật bất đồng KNT) làm cho thao tác cập nhật liệu BG bị chậm 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 biên sử thời gian cập nhật chương trình Thử nghiệm thực máy tính cá nhân có cấu hình CPU Intel Core i7 3612QM, RAM DDR3 8GB, HDD SATA3 1TB 5400rpm, hệ điều hành Windows 64bit SP1, HQT CSDL PostgreSQL 9.3.4 64bit Mỗi thử nghiệm thao tác liệu thực 10 lần tính kết lần – 10 với giả định thao tác HQT CSDL thực thi “ổn định” sau số thử nghiệm, cụ thể 3.4.1 Truy vấn gốc thử nghiệm SELECT countries.country_id, countries.country_name, countries.country_region_id, countries.country_region, customers.cust_id, customers.cust_first_name, stomers.cust_last_name, SUM(sales.quantity_sold * costs.unit_price), COUNT(*) FROM countries, customers, sales, costs WHERE countries.country_id = customers.country_id AND customers.cust_id = sales.cust_id AND sales.time_id = costs.time_id AND sales.promo_id = costs.promo_id AND sales.channel_id = costs.channel_id AND sales.prod_id = costs.prod_id 40 GROUP BY countries.country_id, countries.country_name, countries.country_region_id, countries.country_region, customers.cust_id, customers.cust_first_name, customers.cust_last_name 3.4.2 Cấu trúc kích thước bảng gốc COUNTRIES (COUNTRY_ID, COUNTRY_ISO_CODE, COUNTRY_NAME, COUNTRY_SUBREGION, COUNTRY_SUBREGION_ID, COUNTRY_REGION, COUNTRY_REGION_ID, COUNTRY_TOTAL, COUNTRY_TOTAL_ID, COUNTRY_NAME_HIST); CUSTOMERS(CUST_ID, CUST_FIRST_NAME, CUST_LAST_NAME, CUST_GENDER, CUST_YEAR_OF_BIRTH, CUST_MARITAL_STATUS, CUST_STREET_ADDRESS, CUST_POSTAL_CODE, CUST_CITY, CUST_CITY_ID, CUST_STATE_PROVINCE, CUST_STATE_PROVINCE_ID, COUNTRY_ID, CUST_MAIN_PHONE_NUMBER, CUST_INCOME_LEVEL, CUST_CREDIT_LIMIT, CUST_EMAIL, CUST_TOTAL, CUST_TOTAL_ID, CUST_SRC_ID, CUST_EFF_FROM, CUST_EFF_TO, CUST_VALID); SALES(PROD_ID, CUST_ID, TIME_ID, CHANNEL_ID, PROMO_ID, QUANTITY_ID, QUANTITY_SOLD, AMOUNT_SOLD); COSTS(PROD_ID, TIME_ID, PROMO_ID, CHANNEL_ID, UNIT_COST, UNIT_PRICE); 41 Bảng Số lượng cột Số lượng dòng Countries 10 23 Customers 23 55 500 Sales 918 843 Costs 822 112 Bảng 3.1 – Kích thước bảng gốc tham gia vào truy vấn 3.4.3 Hiệu đạt sử dụng KNT Thay thực thi truy vấn gốc để lấy kết quả, ta thực select tới bảng KNT cho kết (nếu KNT cập nhật), với thời gian sau: Không dùng KNT (ms) Dùng KNT (ms) 122 323 589 Bảng 3.2 – Hiệu sử dụng KNT Ta thấy rõ rệt khoảng cách chênh lệch lớn, tiết kiệm nhiều thời gian (hơn 200 lần) sử dụng KNT để truy vấn kết 3.4.4 Thời gian chạy trigger Như đề cập, thời gian thao tác bảng gốc thời gian cho hoạt động trigger, bảng sau thể trigger biên sử thời gian để vận hành, đo đạc thực thi bảng customers, bảng có nhiều cột bảng (23 cột) Bảng customers Lệnh Trigger INSERT DELETE Khơng có trigger 11 Có trigger 11 Bảng 3.3 – Thời gian chạy trigger 11 12 UPDATE 12 12 42 Như vậy, ta thấy khơng có thay đổi hiệu suất thao tác BG có xuất trigger biên sử 3.4.5 Thời gian cập nhật gia tăng bất đồng khung nhìn thực Bảng sau thể thời gian cập nhật 01 ghi với thao tác insert, delete, update hai bảng chọn để đo đạc sales countries Bảng INSERT (ms) DELETE (ms) UPDATE (ms) Sales 14 14 25 Countries 11 12 14 Bảng 3.4 – Thời gian cập nhật gia tăng bất đồng khung nhìn thực Có thể thấy, thời gian cập nhật gia tăng bất đồng ghi xấp xỉ gần với thao tác cập nhật liệu BG, điều chấp nhận Dựa vào bảng số liệu trên, ta tính tốn đưa hướng sử dụng hợp lý cho phù hợp với nhu cầu toán điều kiện cho phép hệ thống 43 KẾT LUẬN Trong khuôn khổ đề tài khóa luận, nghiên cứu đưa giải pháp để lưu trữ thông tin lịch sử cập nhật liệu cách hợp cho việc lưu trữ sử dụng, đưa thuật toán để tối ưu hóa liệu nhằm tiết kiệm không gian lưu trữ thời gian thực cập nhật Mô-đun cập nhật gia tăng bất đồng áp dụng thuật toán thuật toán đưa bao gồm cải tiến đảm bảo việc cập nhật đạt hiểu tối ưu mặt thời gian Tuy nhiên chương trình cài đặt cịn số hạn chế mặt lập trình xử lý chế, thuật tốn phân tách thơng tin, cho thấy tính khả thi ứng dụng chế cập nhật gia tăng bất đồng KNT vào sử dụng thực tiễn Về tổng quan hệ thống, sử dụng chương trình cịn phải thơng qua nhiều bước, chưa tự động hóa tiến trình chẳng hạn tự động biên dịch mã nguồn C thành thư viện động, từ chưa thể tạo trigger cách tự động mà phải thông qua bước thủ cơng Khi chưa tích hợp vào HQT CSDL PostgreSQL lệnh thức, mơ-đun chương trình chạy độc lập hỗ trợ quản trị viên việc sử dụng KNT với chế cập nhật gia tăng bất đồng bộ, góp phần nhỏ đưa KNT vào sử dụng rộng rãi phổ biến thực tiễn Việc nghiên cứu giải pháp cập nhật gia tăng bất đồng KNT đưa nhiều hướng sử dụng KNT cho người quản lý CSDL Tùy theo tình tốn liệu đặt mà lựa chọn phương pháp cập nhật phù hợp cho tối ưu chi phí hiệu suất hoạt động hệ thống 44 TÀI LIỆU THAM KHẢO [1]Nguyễn Trần Quốc Vinh, “Cập nhật khơng đồng khung nhìn thực”, Tạp chí Khoa học Công nghệ trường Đại học Kỹ thuật, số 74 – 2009 [2]Nguyễn Trần Quốc Vinh, Trần Trọng Nhân, “Nghiên cứu xây dựng mô-đun sinh tự động mã nguồn trigger ngôn ngữ C cập nhật gia tăng, đồng khung nhìn thực PostgreSQL”, Kỷ yếu Hội nghị Quốc gia lần thứ VII Nghiên cứu ứng dụng Công nghệ thông tin (FAIR) – 2014 45 PHỤ LỤC A: MÃ NGUỒN TRIGGER BIÊN SỬ ĐƯỢC SINH TỰ ĐỘNG #include "pg_ctrigger.h" TRIGGER(mviautg_faculties_log) { // Old and new rows' data int64 old_bigint_faculty_id_faculties_table; char old_str_bigint_faculty_id_faculties_table[20]; int64 new_bigint_faculty_id_faculties_table; char new_str_bigint_faculty_id_faculties_table[20]; char * old_str_faculty_name_faculties_table; char * new_str_faculty_name_faculties_table; BEGIN; if (TRIGGER_IS_FIRED_BY_INSERT) { // Get data of new rows' PK GET_INT64_ON_TRIGGERED_ROW(new_bigint_faculty_id_faculti es_table, 1); INT64_TO_STR(new_bigint_faculty_id_faculties_table, new_str_bigint_faculty_id_faculties_table); QUERY("insert into "); _QUERY("mviautg.faculties_log "); 46 _QUERY("(log_action, table_id"); _QUERY(", new_faculty_id"); _QUERY(") values (1, "); _QUERY(","); _QUERY(new_str_bigint_faculty_id_faculties_table); _QUERY(" "); _QUERY(");"); EXECUTE; } else if (TRIGGER_IS_FIRED_BY_UPDATE) { // Get data of old rows GET_INT64_ON_TRIGGERED_ROW(old_bigint_faculty_id_facultie s_table, 1); INT64_TO_STR(old_bigint_faculty_id_faculties_table, old_str_bigint_faculty_id_faculties_table); GET_STR_ON_TRIGGERED_ROW(old_str_faculty_name_faculties_ table, 2); // Get data of new rows' PK GET_INT64_ON_NEW_ROW(new_bigint_faculty_id_faculties_table, 1); INT64_TO_STR(new_bigint_faculty_id_faculties_table, new_str_bigint_faculty_id_faculties_table); QUERY("insert into "); 47 _QUERY("mviautg.faculties_log "); _QUERY("(log_action, table_id"); _QUERY(", new_faculty_id"); _QUERY(", old_faculty_id"); _QUERY(", old_faculty_name"); _QUERY(") values (2, "); _QUERY(","); _QUERY(new_str_bigint_faculty_id_faculties_table); _QUERY(" "); _QUERY(","); _QUERY(old_str_bigint_faculty_id_faculties_table); _QUERY(" "); _QUERY(",'"); _QUERY(old_str_faculty_name_faculties_table); _QUERY("' "); _QUERY(");"); EXECUTE; } else { // Get data of old rows GET_INT64_ON_TRIGGERED_ROW(old_bigint_faculty_id_facultie s_table, 1); INT64_TO_STR(old_bigint_faculty_id_faculties_table, old_str_bigint_faculty_id_faculties_table); 48 GET_STR_ON_TRIGGERED_ROW(old_str_faculty_name_faculties_ table, 2); QUERY("insert into "); _QUERY("mviautg.faculties_log "); _QUERY("(log_action, table_id"); _QUERY(", old_faculty_id"); _QUERY(", old_faculty_name"); _QUERY(") values (3, "); _QUERY(","); _QUERY(old_str_bigint_faculty_id_faculties_table); _QUERY(" "); _QUERY(",'"); _QUERY(old_str_faculty_name_faculties_table); _QUERY("' "); _QUERY(");"); EXECUTE; } END; } 49 PHỤ LỤC B: KỊCH BẢN SQL CHO TRIGGER TRÊN CÁC BẢNG GỐC Logging trigger for faculties table create function mviautg_faculties_log() returns trigger as 'mv1' language c strict; create trigger pgtg_mviautg_faculties_log after insert or update or delete on faculties for each row execute procedure mviautg_faculties_log(); Logging trigger for classes table create function mviautg_classes_log() returns trigger as 'mv1' language c strict; create trigger pgtg_mviautg_classes_log after insert or update or delete on classes for each row execute procedure mviautg_classes_log(); Logging trigger for students table create function mviautg_students_log() returns trigger as 'mv1' language c strict; create trigger pgtg_mviautg_students_log after insert or update or delete on students for each row execute procedure mviautg_students_log(); ... 3.4 – Thời gian cập nhật gia tăng bất đồng khung nhìn thực Có thể thấy, thời gian cập nhật gia tăng bất đồng ghi xấp xỉ gần với thao tác cập nhật liệu BG, điều chấp nhận Dựa vào bảng số liệu trên,... 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 Cập nhật ép buộc nghĩa có khả thực cập nhật gia tăng, cịn khơng sử dụng cập nhật hoàn toàn [1] 1.2 HỆ QUẢN TRỊ CƠ SỞ... lưu để tiến hành cập nhật gia tăng KNT yêu cầu cách bất đồng Để quản lý trình cập nhật gia tăng bất đồng CSDL, quản lý thông tin thời gian cập nhật KNT, thời điểm bắt đầu cập nhật chúng thông