2.3. Các hàm mở rộng trong ngôn ngữ C
2.3.7. Cơ sở cài ựặt (Build Infrastructure) các mở rộng
Phân phối các module mở rộng trong PostgreSQL gặp nhiều khó khăn do việc xây dựng một hệ thống cài ựặt khả chuyển là không dễ dàng. Vì lắ do này, bộ cài PostgreSQL cung cấp một build infrastructure cho các mở rộng, gọi là PGXS, giúp ựơn giản hóa khi biên dịch hàm mở rộng. Tuy nhiên, PGXS không phải là một khung làm việc vạn năng khi xây dựng hàm mở rộng, nó chỉ là một tập các luật ựể tự ựộng biên dịch các module mở rộng của server. để nhận ựược các gói phức tạp hơn, chúng ta phải tự xây dựng hệ thống build infrastructure.
để sử dụng PGXS cho hàm mở rộng, chúng ta phải viết một makefile. Trong makefile này, chúng ta phải thiết lập giá trị cho một vài biến, và cuối cùng thêm vào makefile PGXS. Sau ựây là một vắ dụ xây dựng một module mở rộng tên là
isbn_issn chứa một shared library, một SQL script và một file văn bản:
MODULES = isbn_issn DATA_built = isbn_issn.sql DOCS = README.isbn_issn
include $(PGXS)
Hai dòng cuối là giống nhau trong tất cả các makefile. Trước ựấy, chúng ta gán giá trị cho các biến và thêm các luật make thông dụng.
Các biến sau ựây có thể ựược thiết lập: MODULES
Danh sách các shared objects sẽ ựược biên dịch từ file nguồn với trực hệ (stem) giống nhau (không bao gồm hậu tố trong danh sách này)
DATA
Các file ựược cài ựặt trong prefix/share/contrib
DATA_built
Các file ựược biên dịch trước khi ựược cài ựặt trong prefix/share/contrib
DOCS
Các file ựược cài ựặt dưới prefix/doc/contrib
SCRIPTS
Các file kịch bản (không phải nhị phân) ựược cài ựặt trong prefix/bin
SCRIPTS_built
Các file kịch bản (không phải nhị phân) ựược biên dịch trước khi cài ựặt trong prefix/bin
REGRESS
Danh sách các trường hợp kiểm tra hồi quy (regression test cases) không có hậu tố
PROGRAM
Chương trình nhị phân sẽ ựược biên dịch (danh sách object files trong OBJS)
MODULE_big
Một shared object sẽ ựược biên dịch (danh sách object files trong OBJS) Các biến sau cũng có thể ựược thiết lập:
EXTRA_CLEAN
Các file mở rộng sẽ ựược xóa trong make clean PG_CPPFLAGS
Sẽ ựược thêm vào CPPFLAGS PG_LIBS
Sẽ ựược thêm vào PROGRAM SHLIB_LINK
Sẽ ựược thêm vào MODULE_big
Sau ựó, ta cần ựặt tên makefile, chẳng hạn là Makefile và ựặt nó trong cùng thư mục với file mở rộng. Chúng ta có thể sử dụng make ựể biên dịch và make install ựể cài ựặt các module.
2.4. Tổng kết chương
Chương này ựã giới thiệu chung về hệ quản trị cơ sở dữ liệu PostgreSQL và cách xây dựng hàm mở rộng C trong PostgreSQL. Chương 3 sẽ trình bày cụ thể các hàm mở rộng C ựã ựược xây dựng ựể cho phép tìm kiếm bài hát bằng các truy vấn SQL ựơn giản.
CHƯƠNG 3.
XÂY DỰNG VÀ THỬ NGHIỆM HỆ THỐNG TÌM KIẾM NHẠC SỐ
Trong chương này, luận văn sẽ trình bày quá trình xây dựng và kiểm thử hệ thống nhận dạng nhạc số từ xây dựng cơ sở dữ liệu bài hát ựến xây dựng tập dữ liệu huấn luyện, xây dựng dữ liệu kiểm thử và xây dựng các hàm mở rộng trong PostgreSQL cho phép thực hiện tìm kiếm bản nhạc bằng câu lệnh truy vấn SQL.
Khi cài ựặt hệ thống, việc biên dịch mã nguồn server cũng như xây dựng cơ sở dữ liệu, thu âm bài hát, chia bài hát thành các ựoạn ngắn ựể tạo dữ liệu huấn luyệnẦ ựược thực hiện trên hệ ựiều hành Unix/Linux. để giúp cho việc thu âm bài hát ựể tạo dữ liệu huấn luyện cũng như dữ liệu kiểm thử ựược diễn ra tự ựộng, chúng tôi xây dựng các chương trình bash shell, kết hợp sử dụng một số thư viện nguồn mở như fftw3 [21], ffmpeg [22] và mpg123 [23]. Các chương trình này ựược mô tả như dưới ựây:
Ớ Chương trình batchrec: sử dụng thư viện ffmpeg và mpg123 thực hiện tự ựộng mở và thu âm lại các bài hát từ ựầu ựến khi kết thúc, ghi chúng vào thư mục các bài hát ựã thu âm.
Ớ Chương trình batchsplit: sử dụng thư viện ffmpeg ựể chia nhỏ một bài hát thành các ựoạn nhạc kế tiếp nhau theo một khoảng thời gian nào ựó (thường là 30 giây).
Hệ thống gồm hai thành phần chắnh: chương trình giao diện người sử dùng (UI) viết trên Java 1.4 và chương trình server nhận dạng bài hát (MIS) viết trên C++, cả hai giao tiếp với nhau qua các TCP/IP socket và có thể biên dịch trên cùng một máy hay các máy khác nhau. Nếu không ựược chỉ ựịnh, cổng mặc ựịnh ở ựây là 2000. Trong qúa trình nhận dạng bài hát, chương trình ứng dụng thực hiện thu âm một bài hát theo khoảng thời gian ựược chỉ ựịnh trước, tắnh toán ựặc trưng
cho bản nhạc thu âm ựó và gửi truy vấn là một chuỗi ựặc trưng tới server. Phắa server thực hiện tìm kiếm bài hát cho chuỗi ựặc trưng truy vấn trong một cơ sở dữ liệu các fingerprint và trả về kết quả là tên của bài hát gốc cho chương trình ứng dụng.