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

Một phần của tài liệu 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 (Trang 51)

L ỜI CAM ĐOAN

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

Trong MySQL, các storage engine có thể được xây dựng theo 2 cách: luôn luôn

được dịch cùng với máy chủ MySQL (ví dụ như InnoDB, MyISAM, …), hay được

dịch sau khi máy chủ đã được cài đặt và phải được cài đặt sau đó bằng câu lệnh

INSTALL PLUGIN trước khi được sử dụng. Mỗi phiên bản MySQL khác nhau tích hợp sẵn các storage engine khác nhau. Để kiểm tra các storage engine được hỗ trợ

trong một phiên bản nào đó sử dụng câu lệnh SHOW ENGINES hoặc SHOW STORAGE ENGINES.

Các storage engine được bổ sung sau khi đã cài đặt máy chủ MySQL yêu cầu thực

hiện một số thao tác trước khi sử dụng. Trước tiên, cần biên dịch các storage engine này cùng với máy chủ MySQL bằng cách dịch lại mã nguồn với lựa chọn: CMake – DWITH_<Tên_storage_engine>_STORAGE_ENGINE=1 (nếu sử dụng CMake – từ

phiên bản 5.5 trở đi) hoặc ./cofigure –with_<tên_storage_engine>_storage_engine

make install để xây dựng và cài đặt lại máy chủ MySQL đã tích hợp storage engine được lựa chọn.

Nếu quá trình biên dịch thành công, một thư viện chia sẻ của storage engine sẽ được tạo ra có tên là ha_<tên_storage_engine>.so nằm trong thư mục plugin (vị trí lưu trữ được chỉ định trong biến plugin_dir).

Để sử dụng, thư viện chia sẻ của storage engine phải được được tải vào máy chủ MySQL đang chạy trước khi sử dụng hoặc gỡ bỏ ra khỏi máy chủ khi không sử dụng

nữa.

Gắn (plugging in) một storage engine vào máy chủ: tải thư viện chia sẻ của

storage engine vào trong máy chủ MySQL sử dụng câu lệnh INSTALL PLUGIN có cú

pháp như sau:

Mysql>INSTALL PLUGIN <tên engine> SONAME <tên thư viện chia sẻ>;

Giả sử nếu engine có tên là example và thư viện chia sẻ có tên là ha_example.so thì câu lệnh tải plugin như sau:

Mysql>INSTALL PLUGIN example SONAME ‘ha_example.so’;

Câu lệnh INSTALL PLUGIN sẽ đăng kí storage engine vào bảng mysql.plugin để

máy chủ có thể tải nó. Do đó, người dùng đưa ra lệnh INSTALL PLUGIN phải có

quyền INSERT vào bảng mysql.plugin.

Khi khởi động, máy chủ MySQL sẽ tải và khởi tạo các plugin có trong bảng

mysql.plugin. Do đó, một storage engine chỉ cần được cài đặt một lần duy nhất mà không cần cài đặt mỗi lần khởi động máy chủ.

Gỡ bỏ một storage engine (Unplugging): sử dụng câu lệnh UNINSTALL

PLUGIN có cấu trúc như sau:Mysql> UNINSTALL PLUGIN <tên engine>;

Chẳng hạn để gỡ bỏ storage engine có tên example trong ví dụ trên, sử dụng câu

lệnh:Mysql> UNINSTALL PLUGIN example;

Khi gỡ bỏ một storage engine đã được cài đặt, nó sẽ yêu cầu xóa quyền trong bảng mysql.plugin. Khi đó, máy chủ sẽ không tải và khởi động storage engine nhưng nó

không xóa tệp thư viện chia sẻ của storage engine đó. Do đó, nếu muốn sử dụng lại thì không cần phải biên dịch lại storage engine nữa.

Nếu gỡ bỏ một storage engine đang được sử dụng trong một bảng đang tồn tại, các bảng này sẽ không thể truy cập được nhưng vẫn được thể hiện trên đĩa. Do đó, cần đảm bảo không có bất kì bảng nào đang sử dụng storage engine trước khi gỡ bỏ nó.

Các storage engine được biên dịch tĩnh (luôn luôn được biên dịch cùng với máy (adsbygoogle = window.adsbygoogle || []).push({});

sau khi đã được tra lắp vào máy chủ MySQL thì đều có thể được sử dụng. Các khai báo sử dụng storage engine được sử dụng trong các câu lệnh:

 Tạo bảng với câu lệnh:

CREATE TABLE …. ENGINE = <tên storage engine>;

Nếu không chỉ định rõ tên engine khi tạo bảng thì bảng mới được tạo ra có kiểu là kiểu bảng của storage engine mặc định (InnoDB cho các phiên bản từ 5.5.5 trở lên và MyISAM cho các phiên bản cũ hơn).

 Sửa đổi bảng với câu lệnh:

ALTER TABLE <tên bảng> ENGINE = <tên storage engine khác>;

Chẳng hạn nếu CSDL có tạo một bảng Mytable với lựa chọn ENGINE = MyISAM trước đó, thì sau đó có thể đổi storage engine cho bảng bằng lệnh sau:

ALTER TABLE Mytable ENGINE = InnoDB;

Tuy nhiên, việc đổi kiểu bảng này có rất nhiều vấn đề rất phức tạp, nếu không thực

sự cần và chắc chắn thì không nên thay đổi kiểu của một bảng.

Trong một ứng dụng có thể sử dụng nhiều storage engine khác nhau. Tuy nhiên, theo các chuyên gia thì không nên sử dụng nhiều loại bảng cho một ứng dụng cơ sở dữ

liệu.

Kết luận chương 2: Kiến trúc pluggable storage engine của MySQL đã đem lại

cho MySQL một sự linh hoạt vượt trội hơn hẳn các hệ QTCSDL khác. Các storage engine đang được phát triển hiện nay là vô cùng phong phú và hứa hẹn nhiều bước tiến

mới lớn hơn trong tương lai. Với tính tra lắp được, bên cạnh rất nhiều storage engine

được MySQL phát triển như là InnoDB, MyISAM, Federate, Memory, NDB

Cluster,… MySQL cũng tạo môi trường thuận lợi để những nhà phát triển trên khắp

thế giới có thể tham gia xây dựng nhiều storage engine hơn phục vụ nhiều nhu cầu của người dùng hơn trong nhiều hoàn cảnh. Sự phát triển mạnh mẽ của các storage engine

tạo nên một bức tranh phong phú cho sự đa dạng, tính linh hoạt trong triển khaicác cơ

chế truy cập tệp trong nhiều hoàn cảnh và môi trường khác nhau. Có lẽ đó là một trong

những nguyên nhân chính của sự thành công vượt trội của MySQL với tư cách là một

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

Kiến trúc pluggable storage engine không những cho phép lựa chọn các storage engine đã có phù hợp nhất với ứng dụng người dùng mà còn cung cấp khả năng bổ

sung mới các storage engine tự phát triển cho một ứng dụng riêng. Có rất nhiều

nguyên nhân khi xây dựng mới một storage engine. Đó có thể là do không có storage

engine đã có nào thỏa mãn nhu cầu của miền ứng dụng cần xây dựng, hay đơn giản là muốn xây dựng một ứng dụng mới trên MySQL nhưng đồng thời vẫn muốn khai thác ứng dụng trên nền tảng cũ – khi đó, có thể xây dựng một storage engine cho phép đọc

và ghi dữ liệu từ ứng dụng cũ mà không phải thực hiện bất kì chuyển đổi dữ liệu từ định dạng cũ sang định dạng mới nào và quan trọng nhất là, các pluggable storage engine có thể được sử dụng để kết nối với các dữ liệu không thường xuyên kết nối với

hệ cơ sở dữ liệu – nghĩa là, các storage engine có thể đọc các dòng dữ liệu (ví dụ ,

BLOB trong PBMS), hay các dữ liệu phi truyền thống (ví dụ như NoSQL), các dữ liệu không lưu trữ trên đĩa. Dù mục đích là gì, MySQL cũng thật sự thỏa mãn được yêu cầu

của bất kì người phát triển nào thông qua khả năng xây dựng mới một storage engine chuyên biệt hiệu quả đáp ứng tốt nhất với nhu cầu của ứng dụng cần xây dựng. (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu 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 (Trang 51)