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.

pdf9 trang | Chuyên mục: MySQL | Chia sẻ: dkS00TYs | Lượt xem: 1803 | Lượt tải: 2download
Tóm tắt nội dung 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, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 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:

  • pdfNghiê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
Tài liệu liên quan