Nghiên cứu phương pháp xây dựng Storage Engine cho hệ quản trị cơ sở dữ liệu MySQL
Abstract. Tìm hiểu kiến trúc pluggable storage engine của MySQL. Thông qua việc tìm hiểu
một số storage engine điển hình và một số xu hướng lưu trữ dữ liệu nổi bật hiện nay cùng một số
storage engine tiêu biểu của xu hướng đó (như lưu trữ dữ liệu theo cột với InfoBright, NoSQL
với HandlerSocket), đưa ra một cái nhìn tổng quan về MySQL storage engine cũng như một số
gợi ý khi lựa chọn storage engine phù hợp cho một ứng dụng. Tìm hiểu những yếu tố cần cân
nhắc khi xây dựng storage engine như lựa chọn cách tổ chức lưu trữ dữ liệu, cách thức lưu đệm,
hỗ trợ chỉ mục, hỗ trợ giao tác, các yêu cầu đặc biệt, và cuối cùng đi tới nghiên cứu một tiến
trình xây dựng một storage engine mới được cho là khả thi.
năng lưu trữ dữ liệu theo cột và đáp ứng được các yêu cầu của các ứng dụng kho dữ liệu, kinh doanh thông minh (BI), phân tích, khai phá dữ liệu,… như InfoBright, Kickfire, InfiniBD, … InfoBright: kết hợp cơ sở dữ liệu hướng cột với kiến trúc lưới tri thức để tối ưu hóa cơ sở dữ liệu cho phân tích. Nó có khả năng phân tích một lượng lớn dữ liệu trên web, dữ liệu cuộc gọi, dữ liệu thương mại, các biên bản hệ thống, mạng với tốc độ tải và thời gian truy vấn nhanh hơn rất nhiều. NoSQL và 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), là thuật ngữ chung cho các hệ cơ sở dữ liệu 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. Việc tìm kiếm dữ liệu dựa trên cặp giá trị - khóa diễn ra nhanh hơn và nó đặc biệt thích hợp với các ứng dụng có khối lượng dữ liệu cần lưu trữ cũng như lưu lượng truy cập vào/ra cực lớn mà không đòi hỏi cao cấu hình phần cứng như dịch vụ tìm kiếm, mạng xã hội, …. Dữ liệu trên các nút có thể được nhân bản, một yêu cầu truy vấn có thể gửi tới nhiều máy cùng lúc nên khi một máy gặp sự cố cũng không ảnh hưởng tới toàn bộ hệ thống. Các storage engine áp dụng NoSQL thường được triển khai như các plugin hỗ trợ các storage engine khác để khiến chúng có thể hoạt động như một hệ CSDL NoSQL chẳng hạn như HandlerSocket, Memcached, … HandlerSocket: giao tiếp với các storage engine khác như là InnoDB và khiến chúng có thể hoạt động như là một cơ sở dữ liệu NoSQL. HandlerSocket có thể hỗ trợ nhiều mô hình truy vấn như tìm kiếm khóa chính duy nhất, tìm kiếm chỉ mục không duy nhất, duyệt vùng; quản lí nhiều kết nối đồng thời; hiệu suất thực thi cao do sử dụng các gói mạng nhỏ hơn. E. Sử dụng storage engine Lựa chọn storage engine phù hợp: các storage engine là vô cùng phong phú do đó trước khi bắt đầu một ứng dụng cơ sở dữ liệu trên MySQL, cần lựa chọn storage engine phù hợp. Việc lựa chọn có thể cân nhắc một số yếu tố cơ bản như: hỗ trợ giao tác, tính đồng thời, sao lưu dữ liệu, khôi phục dữ liệu sau đổ vỡ và các chức năng đặc biệt khác như nếu hệ thống muốn tìm kiếm fulltext thì chỉ có MyISAM hỗ trợ,… Một số cài đặt cơ bản: Để kiểm tra các storage engine được hỗ trợ trên MySQL sử dụng câu lệnh: SHOW ENGINE. MySQL sử dụng kiến trúc pluggable storage engine cho phép các storage engine được tải và gỡ ra khỏi server khi đang chạy một cách dễ dàng. - Tải thư viện chia sẻ: Mysql>INSTALL PLUGIN SONAME „‟; - Gỡ bỏ: Mysql> UNINSTALL PLUGIN ; - Tạo bảng: CREATE TABLE …. ENGINE = ; Nếu không chỉ định rõ cho lựa chọn ENGINE thì MySQL sẽ tạo bảng có kiểu của storage engine mặc định. - Thay đổi kiểu bảng: ALTER TABLE ENGINE = ; IV. XÂY DỰNG MỘT STORAGE ENGINE A. Cơ sở hạ tầng của một storage engine Không có kiến trúc chung cho mọi storage engine hay nói cách khác tùy vào ứng dụng cụ thể trong những hoàn cảnh cụ thể mà các storage engine được triển khai với nhũng đặc trưng phù hợp nhất cho ứng dụng. Khi bắt đầu xây dựng một storage engine mới có thể cân nhắc một số yếu tố như: cách thức lưu trữ vật lí, xét tính đồng thời, hỗ trợ giao tác, hỗ trợ chỉ mục, lưu đệm, một số kĩ thuật cải thiện hiệu suất như đa luồng cho xử lí song song, kiểm soát cơ sở dữ liệu, chèn với số lượng lớn,… và các đặc trưng mục tiêu chuyên biệt như hỗ trợ thực thi địa lí, các hạn chế an ninh,... Từ việc cân nhắc này, kết hợp với yêu cầu thực tế của ứng dụng mà xác định cơ sở hạ tầng của storage engine cần xây dựng. B. Handlerton Là giao diện chuẩn cho mọi storage engine. Nằm trong tệp handler.cc và handler.h trong thư mục /sql. Handlerton là một kiến trúc lớn với nhiều phương thức và kiểu dữ liệu được định nghĩa trong cấu trúc. Các phương thức được triển khai như những con trỏ hàm. C. Lớp handler Được dẫn xuất từ lớp sql_alloc, lớp handler cung cấp một tập các phương thức nhất quán kết nối với máy chủ thông qua cấu trúc handlerton. Trong lớp handler chứa đầy đủ các chức năng như tạo mới, xóa, chỉnh sửa bảng; các phương thức tạo các trường, chỉ mục và thậm chí cả các phương thức bảo vệ khỏi đổ vỡ, khôi phục và sao chép dự phòng. D. Quá trình tạo một storage engine mới Theo [4], quá trình tạo mới một storage engine có thể chia thành các giai đoạn sau: - Giai đoạn 1: Tạo engine sơ khai – tạo ra một storage engine cơ sở có thể tra lắp dễ dàng với máy chủ. Tại bước này, các tệp mã nguồn cơ bản được tạo ra, storage engine được thiết lập như là một dẫn xuất của lớp handler cơ sở, và storage engine bản thân nó được tra lắp vào trong mã nguồn của máy chủ. - Giai đoạn 2: Làm việc với các bảng – đảm bảo storage engine có thể tạo, mở, đóng và xóa các tệp. Đây là bước thiết lập các thường trình quản lí các tệp cơ sở và đảm bảo rằng engine làm việc với tệp một cách đúng đắn. - Giai đoạn 3: Đọc và ghi dữ liệu – Là tính năng cơ bản nhất của một storage engine. Đây là bước tạo ra các phương thức để đọc dữ liệu được lưu trữ theo định dạng của phương tiện lưu trữ và dịch chúng sang định dạng dữ liệu bên trong MySQL, và ngược lại, đọc dữ liệu từ định dạng bên trong MySQL sang định dạng khác trên các phương tiện lưu trữ. - Giai đoạn 4: Chỉnh sửa và xóa dữ liệu – Để storage engine sử dụng được trong các ứng dụng, cần triển khai các phương thức cho phép thay đổi dữ liệu trong storage engine như là chỉnh sửa và xóa dữ liệu. - Giai đoạn 5: Lập chỉ mục dữ liệu – một storage engine đầy đủ chức năng nên bao gồm khả năng cho phép đọc nhanh ngẫu nhiên và hạn chế phạm vi truy vấn. Bước này triển khai quá trình lập chỉ mục dữ liệu. - Giai đoạn 6: Bổ sung các hỗ trợ giao tác – là bước cuối cùng và phức tạp nhất. Đây là bước làm cho storage engine trở thành một cơ chế lưu trữ CSDL quan hệ phù hợp để sử dụng trong môi trường giao tác. Quá trình xây dựng storge engine nên được thực hiện tuần tự từ giai đoạn đầu cho đến giai đoạn cuối cùng. Tại mỗi giai đoạn, nên kiểm thử và gỡ lỗi theo bất kì cơ chế nào. Tùy vào ứng dụng cụ thể, các storage engine không cần được xây dựng đầy đủ cả 6 giai đoạn, tuy nhiên về mặt chức năng một storage engine nên được hoàn thiện tối thiểu ở giai đoạn 3 hoặc 4. MySQL cung cấp một storage engine có tên là Example chứa một số thành phần có sẵn ở giai đoạn thứ nhất, có thể được sử dụng để hỗ trợ quá trình tạo storage engine mới. V. KẾT LUẬN Như vậy, sau thời gian nghiên cứu tìm hiểu, luận văn đã đạt được các kết quả như sau: Nghiên cứu tổng quan về MySQL, với tư cách là một hệ quản trị cơ sở dữ liệu mã nguồn mở thành công nhất hiện nay. Sự độc đáo trong kiến trúc khi triển khai lớp pluggable storage engine, sử dụng bộ đệm truy vấn và nhiều bộ đệm khác nhau để tăng tốc độ truy vấn dữ liệu, triển khai các cơ chế tổ chức truy cập tệp, lập chỉ mục, hỗ trợ giao tác trong các storage engine riêng biệt có khả năng tra lắp dễ dàng vào hệ thống là những đặc trưng nổi bật tạo nên sự độc đáo cũng như sự ổn định, hiệu suất cao và đặc biệt là tính linh hoạt của MySQL. Nghiên cứu kiến trúc pluggable storage engine của MySQL, cùng với một số storage engine điển hình được MySQL phát triển. Tuy không thể đầy đủ vì số lượng các storage engine hiện nay là vô cùng phong phú nhưng thông qua các nghiên cứu về các đặc trưng nổi bật của một số storage engine điển hình đó, luận văn đã đưa ra cái nhìn tổng quan nhất về storage engine cũng như những lưu ý cần cân nhắc khi lựa chọn storage engine phù hợp đồng thời trên cơ sở đó đưa ra một số cân nhắc về các chức năng cần và có thể có của một storage engine. Luận văn cũng đi tìm hiểu một số xu hướng lưu trữ mới nổi bật hiện nay và các storage engine được phát triển dựa trên các xu hướng này như lưu trữ dữ liệu theo cột với InfoBright, NoSQL với đại diện là HandlerSocket. Trên cơ sở đó, nhấn mạnh sự phong phú đa dạng của sự phát triển storage engine hiện nay và trong tương lai. Cuối cùng, luận văn cũng đã đi nghiên cứu về một quá trình xây dựng storage engine được cho là khả thi từ bước cân nhắc các yếu tố cần thiết cho một storage engine tới một tiến trình xây dựng một storage engine cơ bản. Việc xây dựng một storage engine là vô cùng phức tạp và tùy thuộc rất lớn vào một bài toán ứng dụng cụ thể. Do đó, luận văn mới chỉ đưa ra những bước tiếp cận ban đầu cho việc xây dựng một storage engine. Phát triển thêm các chức năng của một storage engine đã có hay xây dựng một storage engine mới có thể là những hướng phát triển tiếp theo của luận văn. References. 1. Daniel J. Abadi (2008), Query Execution in column – oriented database system, MIT PhD Dissertation, Massachusets Institute Technology, USA, pp. 17- 45. 2. Daniel J. Abadi (2007), “Column – stores for wide and sparse data”, Proceedings of CIDR, Asilomar, USA. 3. Daniel J. Abadi, Samuel R. Madden, Nabil Hachem (2008), “Column-stores vs. Row-stores: How different are they really?”, SIGMOD‟08 Proceedings of the 2008 ACM SIGMOD international conference on Management of data, pp. 967 – 980. 4. Charles A. Bell (2007), Expert MySQL, Apress, NewYork, USA 5. Guy Harrison (2010), 10 things you should know about NoSQL databases, at: databases/1772 6. Knut Haugen (2010), A brief history of NoSQL, at: history-of-nosql.html 7. Yoshinori Matsunobu (2010), Using MySQL as a NoSQL – A story for exceeding 750,000 qps on a commondity server, at: nosql-story-for.html 8. MySQL AB (2010), MySQL 5.5 manual, pp.37-150, 1184-1334 9. Baron Schwartz et al Peter Zaitsev, Vadim Tkachenko, Jeremy D. Zawodny, Arjen Lentz, and Derek J. Balling (2008), High Performance MySQL, 2nd Edition, O‟Reilly, USA, pp.1-14, 80- 149, 204-216. 10. Sybase Inc. (2008), Gaining the performance edge using a column – oriented database management system, USA. 11. Writing a custom storage engine, at: ngine 12. MySQL specific CMake marcos, at: 13. How can I create a new storage engine for MySQL, at:
File đính kèm:
- Nghiên cứu phương pháp xây dựng Storage Engine cho hệ quản trị cơ sở dữ liệu MySQL.pdf