CHƯƠNG 1. TỔNG QUAN VỀ MYSQL Sự phát triển mạnh mẽ của phong trào mã nguồn mở trong những năm gần đây đã thực sự đem lại cho nền công nghiệp phần mềm những triển vọng mới. Ngay từ khi được Richard Stallman khởi xướng (năm 1970) đến khi hệ điều hành Linux ra đời (năm 1991, do Linux Torvalds người Phần Lan viết nhân) và cho đến ngày nay, phần mềm mã nguồn mở dần khẳng định được vị thế của mình, với cộng đồng người phát triển lên tới hàng triệu người trên khắp thế giới, cùng sự phổ biến của một số phần mềm nguồn mở như Linux, Apache HTTP server, OpenSSL, MySQL, BIND, Sendmail,… hay những câu chuyện thành công của các công ty kinh doanh mã nguồn mở như MySQL AB, Red Hat, Slackware,… (điều mà những người chống phong trào mã nguồn mở cho là “không tưởng”). Trong phong trào đó, MySQL nổi lên như là một hệ quản trị cơ sở dữ liệu (hệ QTCSDL) phổ biến nhất hiện nay với khoảng 8 triệu bản cài đặt trên khắp thế giới.
Vậy MySQL là gì? Cái gì khiến nó trở thành hệ QTCDL thành công đến như vậy? 1. Hệ quản trị cơ sở dữ liệu MySQL MySQL là hệ QTCSDL thuộc sở hữu của MySQL AB, AB là từ viết tắt của từ Thụy Điển “aktiebolag” nghĩa là công ty cổ phần hay công ty, được bắt đầu như một liên minh vốn đầu tư với mục tiêu xây dựng một hệ cơ sở dữ liệu quan hệ nguồn mở đáng tin cậy thay thế hệ cơ sở dữ liệu độc quyền thương mại. MySQL AB tạo ra doanh thu bằng cách bán giấy phép thương mại, hỗ trợ và cung cấp các dịch vụ phát triển chuyên nghiệp gồm tư vấn, đào tạo, chứng nhận sản phẩm. MySQL là hệ QTCSDL quan hệ hỗ trợ đầy đủ các câu lệnh SQL.
Nó cho phép phát triển trên nhiều nền tảng phần cứng khác nhau. Hơn nữa, MySQL được phát triển dựa trên ngôn ngữ C/C++, ngôn ngữ sử dụng để xây dựng gần như toàn bộ hệ điều hành Linux cũng như Microsoft Windows và Macintosh. Nó được thiết kế dựa trên kiến trúc client/server. MySQL được đánh giá là một hệ QTCSDL phát triển khá đầy đủ và có độ tin cậy, tính ổn định, hiệu suất cao cũng như dễ sử dụng.
Đặc biệt, MySQL cung cấp một cơ chế tuyệt vời cho phép tổ chức lưu trữ dữ liệu theo nhiều cách khác nhau để đạt hiệu quả cao nhất phù hợp với từng hoàn cảnh cụ thể gọi là pluggable storage engine. Điều đó khiến cho MySQL được đánh giá là có tính linh hoạt rất cao. Tại tầng thấp nhất của hệ thống, các máy chủ được xây dựng dựa trên mô hình đa luồng. Về mặt chức năng, nhiều phần trong lõi của MySQL được xây dựng từ những năm 1980.
Đến năm 1995, ngôn ngữ truy vấn dữ liệu SQL được đưa vào hệ thống. MySQL sử dụng trình biên dịch GNU C (GCC) có khả năng cung cấp tính mềm dẻo tuyệt vời cho mọi môi trường đích. TIEU LUAN MOI download : skknchat@gmail.com 8 Các công cụ máy khách của MySQL phần lớn được viết bằng ngôn ngữ C nên có tính di động và tốc độ cao hơn. Các thư viện máy khách, các cơ chế truy cập có thể được viết bằng bất kì ngôn ngữ lập trình nào như .Net, Java, ODBC,… MySQL sử dụng chiến lược phát triển song song để đảm bảo vẫn duy trì các phiên bản cũ trong khi phát triển các phiên bản mới.
Việc này tạo nên sự khác biệt cơ bản so với các phần mềm bản quyền thương mại, nơi mà ngay khi các nhà cung cấp đưa ra phiên bản mới thì các phiên bản cũ bị dừng lại. Điều đó buộc các khách hàng phải thay đổi môi trường cùng với các nỗ lực phát triển kèm theo, đặc biệt khi có những thay đổi về mặt kiến trúc. Trong khi đó, MySQL cùng với chiến lược đa bản phát hành cho phép người dùng duy trì các sản phẩm lâu dài hơn mà vẫn đảm bảo được hỗ trợ. Do đó, khách hàng có nhiều thời gian chuẩn bị trước những bước thay đổi cần thiết đồng thời có thể đảm bảo sử dụng tài nguyên hiệu quả nhất mà không phải vội vã thay đổi kế hoạch dài hạn.
Sự phát triển của MySQL cũng như các phần mềm nguồn mở khác tuân theo tiến trình gồm nhiều giai đoạn. Mỗi giai đoạn có thể có nhiều bản phân phối khác nhau. Các giai đoạn phát triển như sau: Giai đoạn 1: Giai đoạn phát triển (Development) – đây là giai đoạn mà các tập tính năng hoặc sản phẩm mới được lập kế hoạch hoặc triển khai như một hướng phát triển mới. Giai đoạn 2: Alpha – là giai đoạn triển khai sàng lọc tính năng và chỉnh sửa khiếm khuyết (sửa lỗi).
Giai đoạn 3: Beta – các tính năng được “đóng băng” (không thể thêm các tính năng mới), bổ sung các kiểm thử chuyên sâu và triển khai dò tìm khiếm khuyết. Giai đoạn 4: Gamma – Về cơ bản, các sản phẩm trong giai đoạn này là mã đã được đóng băng và các vòng kiểm thử cuối cùng đã được tiến hành. Các sản phẩm trong giai đoạn này thường là các ứng viên sẽ đưa ra phát hành. Giai đoạn 5: Stable – Nếu không tìm thấy khiếm khuyết nghiêm trọng, mã được công bố là ổn định và sẵn sàng để phân phối sản phẩm.
Khi sử dụng MySQL, tùy vào mục đích sử dụng của người dùng mà có thể lựa chọn các bản phân phối phù hợp. Tuy nhiên, nên sử dụng phiên bản alpha mới nhất cho những phát triển mới. Điều đó tạo ra cơ hội tốt hơn khi bản chỉnh sửa đã được kiểm thử trước tại giai đoạn alpha. MySQL là một hệ QTCSDL mã nguồn mở tuân thủ theo giấy phép nguồn mở GPL (General Public License).
MySQL AB sử dụng giấy phép nguồn mở GPL như là điểm chính trong mô hình kinh doanh. MySQL AB thừa nhận cộng đồng mã nguồn mở GNU cũng như các liên danh đầu tư với MySQL AB đều được kí kết dưới cùng một triết lí và giấy phép. TIEU LUAN MOI download : skknchat@gmail.com 9 Đặc biệt, MySQL sử dụng khái niệm cấp phép kép (dual – license). Có nghĩa là, bên cạnh các sản phẩm tuân thủ đúng giấy phép nguồn mở GPL, MySQL cũng được cấp phép như một sản phẩm thương mại.
Một giấy phép thương mại cho phép MySQL sở hữu mã nguồn, cũng như bản quyền về tên, logo, và các tài liệu liên quan. Đây là điểm độc đáo khác hẳn với các công ty mã nguồn mở khác. MySQL AB giữ lại các tài sản trí tuệ của phần mềm trong khi vẫn tận dụng sự hỗ trợ của cộng đồng những người phát triển trên toàn cầu để mở rộng và phát triển phần mềm. Điều này đã khiến cho MySQL nhanh chóng trở thành một hệ QTCSDL mã nguồn mở ổn định, có tính linh hoạt và phổ biến nhất hiện nay.
Vấn đề đặt ra là, khi MySQL vừa được cấp phép như phần mềm nguồn mở vừa được coi là phần mềm thương mại thì liệu có thực sự được phép chỉnh sửa hay không? Câu trả lời là có. Bất kì người phát triển nào đều có thể chỉnh sửa MySQL, tất nhiên phải tuân thủ giấy phép nguồn mở GPL. Đồng thời cũng có thể chỉnh sửa dưới giấy phép thương mại trong trường hợp muốn sử dụng bản chỉnh sửa cho những phát triển riêng hoặc gói hay nhúng MySQL vào trong sản phẩm thương mại đã có. Kiến trúc MySQL So với rất nhiều hệ CSDL khác, MySQL có rất nhiều khác biệt.
Mặc dù MySQL không hoàn hảo nhưng nó lại được đánh giá là một hệ QTCSDL linh hoạt có khả năng làm việc tốt trong nhiều môi trường khác nhau đáp ứng nhiều mục đích đa dạng, đặc biệt là trong các ứng dụng web. Hiện nay, MySQL có khả năng triển khai trong các ứng dụng nhúng, kho dữ liệu, lập chỉ mục nội dung và các phần mềm phân phối, các hệ thống đòi hỏi tính sẵn sàng cao, các xử lí giao tác trực tuyến (OLTP), … MySQL vô cùng linh hoạt theo nhiều cách khác nhau. Nó có thể được cấu hình để chạy tốt trên nhiều nền tảng phần cứng và hỗ trợ cho nhiều kiểu dữ liệu khác nhau thông qua một cơ chế độc đáo chỉ có duy nhất trên MySQL, pluggable storage engine. Các storage engine được thiết kế độc lập với xử lí truy vấn và các nhiệm vụ khác trong máy chủ như một trình runtime plugin.
Tùy vào ứng dụng cụ thể, có thể lựa chọn cách thức lưu trữ dữ liệu, cách thể hiện và các đặc trưng tối ưu nhất thông qua việc lựa chọn các storage engine đã có phù hợp, hay tự xây dựng storage engine riêng. Kiến trúc hệ thống MySQL được mô tả như là một hệ thống phân lớp các hệ thống con. Trong khi mã nguồn chưa được biên dịch thành các phần hoặc mô-đun riêng, mã nguồn của các hệ thống con được tổ chức dưới dạng cây phân cấp. Hệ thống được phát triển dựa trên các thư viện cơ sở cung cấp các chức năng mức thấp như điều khiển luồng, tổ chức lưu trữ trong bộ nhớ, các thao tác mạng, đăng nhập, và thậm chí cả điều khiển truy cập và các thao tác quản lí.
Các thư viện này được kết hợp với nhau tạo thành các hệ thống con và các hệ thống con có thể được xây dựng dựa trên các hệ thống con khác. Các hệ thống giao tiếp thông qua một giao diện API chuẩn. Giao diện API này cho phép hệ thống MySQL vừa được sử dụng như một máy chủ độc lập, vừa TIEU LUAN MOI download : skknchat@gmail.com 10 như một hệ CSDL nhúng trong một ứng dụng lớn hơn. Kiến trúc của MySQL được mô tả chi tiết như hình 1.
Kiến trúc của MySQL server, trong [4, pp.1185] Lớp trên cùng là các lớp kết nối cơ sở dữ liệu (Connector): cung cấp phương thức truy cập cho các ứng dụng máy khách. Các ứng dụng này có thể được viết bằng bất kì ngôn ngữ nào như C, .Net, PHP, ODBC, …. Các công cụ phụ trợ được nhóm trong nhóm các tiện ích và dịch vụ quản lí gồm sao lưu và khôi phục dữ liệu, an ninh, nhân bản, phân cụm, quản trị, cấu hình, … Lớp nằm ngay dưới lớp kết nối là lớp connection pool. Đây là lớp quản lí tất cả các truy cập của người dùng như xác thực người dùng, xử lí luồng, bộ nhớ, bộ đệm tiến trình cần thiết cho một kết nối của máy khách.
Lớp kế tiếp là lớp quan trọng nhất của một hệ thống CSDL, nơi xử lí các truy vấn người dùng. Tại lớp này, các truy vấn được đưa vào thông qua giao diện SQL, sau đó được phân tách, tối ưu, thực thi và lưu đệm. Sự độc đáo của MySQL được thể hiện trong lớp plugable storage engine.