Luận văn: Nghiên cứu xây dựng Storage Engine cho MySQL - ĐH Quốc Gia Hà Nội

Luận văn thạc sĩ: Nghiên cứu phương pháp xây dựng storage engine cho hệ quản trị CSDL MySQL. Tìm hiểu kiến trúc, phát triển storage engine tùy chỉnh.

Chuyên ngành

Công nghệ thông tin

Người đăng

Ẩn danh

Thể loại

Luận văn thạc sĩ

2012

75
2
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

DANH MỤC CÁC KÍ HIỆU VÀ CHỮ VIẾT TẮT

DANH MỤC CÁC BẢNG

DANH MỤC CÁC HÌNH VẼ

1. TỔNG QUAN VỀ MYSQL

1.1. Hệ quản trị cơ sở dữ liệu MySQL

1.2. Kiến trúc MySQL

1.3. Truy vấn dữ liệu trên MySQL

1.4. Giao diện SQL

1.5. Tối ưu truy vấn

1.6. Thực thi truy vấn

1.7. Bộ đệm truy vấn

1.8. Cache và Buffer

1.9. Các đặc trưng của MySQL

1.10. Quản lí kết nối và an ninh

1.11. Quản lí đồng thời

1.12. Điều khiển đồng thời đa phiên bản (MVCC)

2. MYSQL PLUGGABLE STORAGE ENGINE

2.1. Storage engine là gì?

2.2. Kiến trúc pluggable storage engine

2.3. Một số storage engine điển hình

2.4. Một số storage engine có sẵn

2.5. Lưu trữ theo cột và storage engine

2.6. Kĩ thuật lưu trữ theo cột

2.7. NoSQL và storage engine

2.8. Sử dụng storage engine có sẵn

2.9. Lựa chọn storage engine phù hợp

2.10. Một số thao tác cơ bản

3. CHƯƠNG 3: XÂY DỰNG STORAGE ENGINE

3.1. Cơ sở hạ tầng của một storage engine

3.2. Mã nguồn của MySQL

3.3. Cấu trúc Handlerton

3.4. Quá trình tạo một storage engine mới

TÀI LIỆU THAM KHẢO

MỞ ĐẦU

Tóm tắt

I. Tổng Quan Storage Engine MySQL Cách Hoạt Động và Lợi Ích

Hiệu suất thực thi là một tiêu chí quan trọng đánh giá sự thành công của một hệ cơ sở dữ liệu. Đặc biệt trong thời đại bùng nổ thông tin hiện nay, khi mà khối lượng dữ liệu cực lớn và tăng nhanh chóng, không ngừng kéo theo những đòi hỏi cao về tốc độ cũng như tính hiệu quả của các hệ cơ sở dữ liệu. Tổ chức lưu trữ dữ liệu và triển khai cơ chế truy cập dữ liệu (hay còn gọi là thiết kế vật lí cơ sở dữ liệu) là một trong những giải pháp quan trọng, cơ bản được lựa chọn nhằm cải thiện đáng kể hiệu suất của hệ thống. Tổ chức lưu trữ và truy cập dữ liệu hợp lí và hiệu quả có thể đem lại những hiệu quả bất ngờ trong một số trường hợp. Thực tế chỉ ra rằng, mặc dù hiện nay có rất nhiều cách thức lưu trữ và tổ chức truy cập dữ liệu khác nhau, từ cách phân đoạn dữ liệu, tổ chức tệp trên các thiết bị, lưu đệm các dữ liệu có tần suất truy cập thường xuyên, hay các cơ chế lập chỉ mục để truy cập nhanh tới dữ liệu, … Tuy nhiên, mỗi cách thức có những ưu điểm và hạn chế riêng, có thể tốt trong trường hợp này nhưng lại không hiệu quả trong trường hợp khác. Hay nói một cách khác, không thể có cơ chế tốt nhất cho mọi trường hợp. Hơn nữa, mỗi hệ quản trị cơ sở dữ liệu hiện nay chỉ có thể triển khai một hoặc một vài cơ chế nhất định vì bản thân các cơ chế khác nhau có thể có những xung đột gây ảnh hưởng lẫn nhau. Và tất nhiên hệ quả là, mỗi hệ quản trị cơ sở dữ liệu thường chỉ đáp ứng tốt nhu cầu cho một hoặc một vài miền ứng dụng trong những trường hợp nhất định. Như vậy, có thể khẳng định rằng, không có cơ chế lưu trữ và truy cập tệp tốt cho mọi trường hợp cũng như không thể triển khai mọi cơ chế truy cập tệp trong một hệ quản trị cơ sở dữ liệu. Sẽ thật lí tưởng nếu có thể triển khai nhiều cơ chế tổ chức, truy cập tệp như là các gói giải pháp để đáp ứng nhu cầu của từng ứng dụng cụ thể và dễ dàng tra lắp cũng như gỡ bỏ ra khỏi hệ thống. Hệ quản trị cơ sở dữ liệu MySQL đã thực sự làm được điều này thông qua việc triển khai các Storage Engine, nơi chứa một tập các cơ chế lưu trữ, truy cập, hỗ trợ giao tác, các cơ chế khóa, cách ly, . nhằm bổ sung các kiểu lưu trữ mới, dễ dàng tra lắp vào máy chủ thông qua cơ chế pluggable storage engine. Nó có thể là một Storage Engine đã được xây dựng sẵn hay bất kì một Storage Engine tự phát triển mới. Vì vậy, MySQL có thể đáp ứng được nhiều nhu cầu của nhiều ứng dụng trong nhiều hoàn cảnh khác nhau. Cơ chế pluggable storage engine đã tạo nên tính linh hoạt, mềm dẻo có lẽ duy nhất có của MySQL, góp phần không nhỏ vào sự thành công của MySQL với tư cách là một hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất hiện nay.

1.1. Khái Niệm MySQL Storage Engine Định Nghĩa và Vai Trò

Storage Engine hay thực chất là các kiểu bảng là một khái niệm mới do MySQL đưa ra. Trong khi phát triển các ứng dụng, MySQL cho phép lựa chọn cách thức những bảng dữ liệu được lưu trữ dựa trên các Storage Engine phù hợp nhất với tình huống cụ thể. Thậm chí, MySQL còn cho phép người dùng có thể tự thiết kế Storage Engine cho riêng mình và dễ dàng tra lắp vào hệ thống. Điều này tạo nên tính linh hoạt vượt trội cùng với tính độc đáo duy nhất có của MySQL. Có rất nhiều lí do khi sử dụng Storage Engine. Đối với người dùng, khi chỉnh sửa ứng dụng, sẽ rất bất tiện nếu họ phải thực thi các công cụ chuyển đổi hoặc thậm chí kết xuất và nhập (import) toàn bộ dataset. Thay vào đó, nếu chỉ cần chỉnh sửa máy chủ (để sửa lỗi và các tính năng khác mà không phải chuyển toàn bộ dữ liệu) sẽ tiết kiệm được nhiều thời gian, công sức và chi phí. Điều đó có nghĩa là máy chủ phải hỗ trợ nhiều định dạng tệp.

1.2. Lợi Ích Của Pluggable Storage Engine trong MySQL

Storage Engine gồm một tập các cơ chế lưu trữ, truy cập, hỗ trợ giao tác, các cơ chế khóa, cách ly,… nhằm bổ sung các kiểu lưu trữ mới cho máy chủ MySQL, làm nhiệm vụ cầu nối giữa máy chủ MySQL với hệ thống tệp của hệ điều hành. Các Storage Engine có thể dễ dàng tra lắp vào trong MySQL thông qua một cơ chế đặc biệt gọi là MySQL pluggable storage engine. Cơ chế này cho phép mọi Storage Engine đều có thể tra lắp vào máy chủ sử dụng chung một giao diện chuẩn. Khi sử dụng Storage Engine, ứng dụng không cần phải biết dữ liệu được lưu trữ như thế nào. MySQL sử dụng một Storage Engine mặc định cho các bảng mà nó tạo ra, chẳng hạn như InnoDB cho các phiên bản 5.5 trở lên hoặc MyISAM cho các phiên bản cũ hơn. Do đó, nếu không có yêu cầu đặc biệt, thì không cần chỉ định Storage Engine. Tuy nhiên, đối với các ứng dụng lớn hoặc có những yêu cầu truy cập đặc biệt, cần có sự lựa chọn phù hợp.

II. Thách Thức và Vấn Đề Khi Sử Dụng Storage Engine MySQL

Khi bắt đầu phát triển một ứng dụng CSDL bất kì, các cơ chế truy cập tệp hay còn gọi là thiết kế vật lí CSDL là một yếu tố quan trọng góp phần cải thiện hiệu suất thực thi của hệ CSDL. Mặc dù tốc độ truy cập tệp phụ thuộc rất nhiều vào tính hiệu quả và tính đơn giản của hệ thống tệp hỗ trợ bởi hệ điều hành nhưng nó có thể được cải thiện đáng kể dựa vào cách thức tổ chức lưu trữ dữ liệu và các phương thức truy cập tệp, từ đó cải thiện hiệu suất của toàn bộ hệ CSDL. Hiện nay có rất nhiều cơ chế tổ chức dữ liệu như: phân đoạn dữ liệu theo nội dung dữ liệu hoặc ngữ cảnh và tổ chức dữ liệu trên cây phân cấp; tổ chức dữ liệu trên đĩa theo cấu trúc nhằm cung cấp một phương thức truy cập tối ưu; cơ chế lưu đệm các thông tin thường xuyên truy cập để giảm thiểu các thao tác vào/ra trên bộ nhớ ngoài nhằm cải thiện hiệu suất đọc/ghi dữ liệu, làm giảm chi phí lưu trữ và tìm kiếm dữ liệu; hay cơ chế lập chỉ mục nhằm tăng tốc độ truy cập và tìm kiếm dữ liệu trên bộ nhớ ngoài, phân cụm và nhân bản dữ liệu trên các hệ phân tán… Mục đích của các cơ chế tổ chức dữ liệu là tối thiểu chi phí vào/ra trong hệ CSDL, có nghĩa là: - Sử dụng hiệu quả cấu trúc dữ liệu trên đĩa: cho phép tìm kiếm nhanh chóng và hiệu quả chỉ những dữ liệu có liên quan thông qua các con đường truy cập tối ưu nhất. - Tổ chức dữ liệu trên đĩa để chi phí vào/ra khi tìm kiếm dữ liệu liên quan là tối thiểu. Tuy nhiên, các nhà nghiên cứu cũng đã chỉ ra rằng, không có phương thức tổ chức truy cập tệp tốt cho mọi trường hợp. Cho nên, tùy từng ứng dụng cụ thể và nhu cầu của người dùng có thể triển khai các phương pháp tốt nhất có thể.

2.1. Không Có Storage Engine Nào Phù Hợp Với Mọi Trường Hợp

Không phải lúc nào cũng có thể dễ dàng tìm được Storage Engine hoàn hảo cho mọi bài toán. Sự phức tạp nằm ở chỗ, mỗi Storage Engine đều có điểm mạnh và điểm yếu riêng. Việc lựa chọn Storage Engine không phù hợp có thể dẫn đến những vấn đề về hiệu suất, khả năng mở rộng và thậm chí là bảo toàn dữ liệu. Do đó, việc hiểu rõ từng loại Storage Engine và những đặc điểm của ứng dụng là vô cùng quan trọng.

2.2. Khó Khăn Trong Việc Triển Khai Nhiều Cơ Chế Lưu Trữ Cùng Lúc

Một hệ quản trị cơ sở dữ liệu thường chỉ có thể triển khai một số cơ chế nhất định do xung đột giữa các cơ chế. Vì vậy, sự linh hoạt của MySQL trong việc hỗ trợ nhiều Storage Engine là một lợi thế lớn, nhưng cũng đòi hỏi người dùng phải có kiến thức sâu rộng để tận dụng tối đa khả năng này.

III. So Sánh Chi Tiết InnoDB vs MyISAM Chọn Storage Engine Nào

Các Storage Engine khiến cho MySQL được đánh giá là một hệ QTCSDL linh hoạt có khả năng đáp ứng được nhiều nhu cầu người dùng trong nhiều tình huống khác nhau. Các Storage Engine hiện nay là rất phong phú. Nó có thể là các Storage Engine được chính MySQL AB, chủ sở hữu của MySQL phát triển, tích hợp sẵn hoặc không trong máy chủ MySQL; hoặc cũng có thể là một Storage Engine của bất kì bên thứ ba nào hoặc bất cứ ai có nhu cầu phát triển. Sẽ là rất khó để có thể hiểu sâu về tất cả các Storage Engine, tuy nhiên, trong phạm vi nghiên cứu này, chỉ xin đưa ra một số Storage Engine điển hình thường hay dùng trong MySQL cũng như một số hướng tiếp cận tổ chức truy cập tệp nổi bật hiện nay và một vài Storage Engine đại điện cho các xu hướng đó.

3.1. InnoDB Hỗ Trợ Giao Dịch Khóa Mức Dòng và MVCC

Được thiết kế theo mô hình ACID với các giao tác có khả năng commit, rollback, khôi phục sau đổ vỡ để bảo vệ dữ liệu của người dùng. CSDL được duy trì trong một trạng thái nhất quán tại mọi thời điểm – sau mỗi thao tác commit hoặc rollback, và trong khi thực hiện các giao tác trong tiến trình. Đồng thời, các giao tác được cách ly với các giao tác khác tránh xung đột; Kết quả của các giao tác là bền vững: giao tác chỉ thành công khi tất cả các lệnh đã được hoàn thành hoặc không gì cả. Do đó, CSDL được đảm bảo an toàn trước những nguy cơ đổ vỡ hệ thống, lỗi nguồn, …Được triển khai trên cả 4 mức cách ly chuẩn của MySQL. Mặc định là REPEATABLE READ với chiến lược khóa next – key để ngăn chặn đọc ma (đọc “phantom”).Khi thực thi trong mức cách ly repeatable read, vấn đề xảy ra khi bên trong cùng một giao tác, nếu cùng một truy vấn tạo ra những tập kết quả khác nhau tại những thời điểm khác nhau, gọi là đọc “phantom” (đọc ma).

3.2. MyISAM Tốc Độ Truy Vấn Cao Phù Hợp Với Ứng Dụng Đọc Nhiều

MyISAM là cơ chế truy cập tệp được sử dụng trong hầu hết các ứng dụng kho dữ liệu, thương mại điện tử, các ứng dụng doanh nghiệp. Các tệp MyISAM là mở rộng của ISAM (phương thức truy cập tệp tuần tự theo chỉ mục) có bổ sung các tối ưu như các cơ chế đánh chỉ mục và tối ưu hóa tăng tốc độ. Trong MyISAM, điều khiển đồng thời bằng các khóa mức bảng. MyISAM được đánh giá là một Storage Engine đáng tin cậy cho các ứng dụng yêu cầu tìm kiếm dữ liệu nhanh, do đó phù hợp với các ứng dụng cần hiệu suất đọc dữ liệu cao.

3.3. Bảng So Sánh Chi Tiết Các Đặc Trưng Quan Trọng

Thực tế, InnoDB vẫn còn một vài thiếu sót mặc dù đã có rất nhiều những cải tiến theo thời gian. Do đó, tùy thuộc vào yêu cầu cụ thể của ứng dụng cần phát triển mà có thể lựa chọn Storage Engine phù hợp. Dưới đây là bảng so sánh một vài đặc trưng cơ bản của MyISAMInnoDB để người dùng có thể tham khảo.

IV. Các Storage Engine MySQL Khác Archive Memory Federated

MySQL hỗ trợ rất nhiều Storage Engine với nhiều đặc trưng khác nhau. Việc hiểu một cách sâu sắc và đánh giá hiệu quả về các Storage Engine cần có thời gian và thử nghiệm trong các hoàn cảnh cụ thể của ứng dụng. Bên cạnh các Storage Engine được MySQL phát triển, hiện nay, có rất nhiều Storage Engine được phát triển bởi rất nhiều nhà phát triển trên khắp thế giới (gọi là bên thứ ba). Sự phát triển của các Storage Engine này là rất phong phú.

4.1. Archive Lưu Trữ Dữ Liệu Lớn Ít Truy Cập Tối Ưu Nén

Các bảng Archive có khả năng lưu trữ một lượng lớn dữ liệu không lập chỉ mục trong một không gian cực nhỏ vừa đủ. Mã nguồn của Storage Engine này nằm trong thư mục storage/archive. Khi tạo một bảng Archive, máy chủ tạo ra một tệp định nghĩa bảng được đặt tên là <tên bảng>.frm và tệp dữ liệu được đặt tên là <tên bảng>. ARCHIVE chỉ hỗ trợ phép toán INSERT và SELET mà không hỗ trợ các phép toán DELETE, REPLACE và UPDATE. Nó cũng hỗ trợ các phép toán ORDER BY, các cột BLOB, và về cơ bản là tất cả các kiểu dữ liệu không gian khác.

4.2. Memory Heap Lưu Trữ Tạm Thời Truy Cập Siêu Nhanh

Memory (tên cũ là HEAP) tạo ra các bảng có mục đích đặc biệt lưu trữ dữ liệu trong bộ nhớ trong. Memory thường được sử dụng nếu ứng dụng cần: Thực hiện các thao tác như quản lí phiên và lưu đệm; Lưu trữ vào bộ nhớ trong để truy cập nhanh hơn và độ trễ thấp hơn; Sử dụng mô hình truy cập dữ liệu chỉ đọc hoặc chủ yếu đọc (hạn chế các thao tác chỉnh sửa).Tuy nhiên, hiệu suất của Memory phụ thuộc vào sự cân bằng giữa thực thi đơn luồng và chi phí khóa bảng khi chỉnh sửa dữ liệu.

4.3. Federated Truy Cập Dữ Liệu Từ Cơ Sở Dữ Liệu MySQL Từ Xa

Storage Engine cho phép truy cập dữ liệu từ một CSDL MySQL từ xa mà không sử dụng công nghệ nhân bản (replication) hay phân cụm (cluster). Dữ liệu không được lưu trữ trong các bảng địa phương mà được chuyển từ các bảng ở xa. Một bảng Federated gồm có 2 thành phần: Một máy chủ từ xa (remote server): chứa một bảng cơ sở dữ liệu, gồm một định nghĩa bảng (tệp .frm) và một bảng dữ liệu tương ứng với bất kì kiểu nào được hỗ trợ bởi máy chủ mysqld từ xa, bao gồm cả kiểu MyISAM hoặc InnoDB; Một máy chủ địa phương (local server): chứa một bảng CSDL, trong đó chứa một định nghĩa bảng tương ứng với bảng trên máy chủ từ xa.

V. Tối Ưu Storage Engine MySQL Bí Quyết Nâng Cao Hiệu Suất

Với rất nhiều ưu điểm nổi trội cùng với sự cải thiện không ngừng qua từng phiên bản, InnoDB là lựa chọn tốt nhất cho các ứng dụng đòi hỏi độ tin cậy và hiệu suất cao, hỗ trợ giao tác với khả năng thực hiện truy vấn dữ liệu an toàn và bảo vệ dữ liệu người dùng.4 sau đưa ra những so sánh các đặc trưng của MyISAM và InnoDB với tư cách là các storage engine mặc định của MySQL.Bên cạnh các storage engine được MySQL phát triển, hiện nay, có rất nhiều storage engine được phát triển bởi cộng đồng những người phát triển MySQL trên khắp thế giới.

5.1. Tối Ưu Hóa Cấu Hình Storage Engine InnoDB

Tối ưu hóa cấu hình InnoDB là một bước quan trọng để cải thiện hiệu suất cơ sở dữ liệu MySQL. Bằng cách điều chỉnh các tham số như innodb_buffer_pool_size, innodb_log_file_size và innodb_flush_log_at_trx_commit, bạn có thể tối ưu hóa việc sử dụng bộ nhớ, tốc độ ghi và độ tin cậy của dữ liệu.

5.2. Tối Ưu Hóa Truy Vấn Với Storage Engine MyISAM

Để tối ưu hóa truy vấn với MyISAM, hãy chú ý đến việc sử dụng chỉ mục hiệu quả. Đảm bảo rằng các truy vấn SELECT, UPDATE và DELETE sử dụng chỉ mục một cách tối ưu để giảm thiểu thời gian tìm kiếm dữ liệu. Thường xuyên kiểm tra và tối ưu hóa các truy vấn để đảm bảo hiệu suất tốt nhất.

VI. Tương Lai Storage Engine MySQL Xu Hướng Phát Triển Mới

Bên cạnh các Storage Engine được chính MySQL AB phát triển, hiện nay có rất nhiều Storage Engine được phát triển bởi cộng đồng những người phát triển MySQL trên khắp thế giới. Sự phong phú của các Storage Engine cũng đồng nghĩa với sự linh hoạt tuyệt vời mà MySQL đem lại cho người dùng. Người dùng có nhiều lựa chọn hơn khi lựa chọn những phương thức tổ chức, truy cập dữ liệu phù hợp nhất với ứng dụng của mình, thậm chí ngay cả khi đó là những ứng dụng CSDL chuyên sâu. MySQL thực sự đem lại một môi trường làm việc đa dạng phù hợp với nhiều nhu cầu người dùng với nhiều miền ứng dụng trong nhiều hoàn cảnh khác nhau.

6.1. Lưu Trữ Theo Cột Columnar Storage và Các Ứng Dụng Phân Tích

Kĩ thuật lưu trữ hướng cột đặc biệt thích hợp với các ứng dụng xử lí dữ liệu trực tuyến với khối lượng công việc lớn, các hệ thống dữ liệu chuyên sâu như phân tích dữ liệu, kho dữ liệu, … Việc áp dụng kĩ thuật này và phát triển các Storage Engine đã khiến cho MySQL trở thành một hệ QTCSDL có khả năng xử lí được các yêu cầu chuyên biệt một cách hiệu quả, tạo nên tính linh hoạt tuyệt vời của MySQL.

6.2. NoSQL và Sự Kết Hợp Với MySQL Storage Engine

NoSQL có nghĩa là không ràng buộc (Non – Relational), hay phổ biến hơn có nghĩa là không chỉ SQL – Not Only SQL. NoSQL là thuật ngữ chung cho các hệ CSDL không sử dụng mô hình dữ liệu quan hệ. NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị - khóa và hệ thống lưu trữ phân tán. Thuật ngữ NoSQL được giới thiệu lần đầu tiên vào năm 1998 sử dụng làm tên chung cho các hệ CSDL nguồn mở nhỏ không sử dụng SQL để truy vấn. Vào năm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ này trong một hội thảo về mã nguồn mở phân tán. Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới: phân tán + không ràng buộc.

24/09/2025

Trích đoạn nội dung tài liệu

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.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ