Các storage engine trong MySQL

1. Storage engine là gì

Database engine (hay storage engine) là 1 thành phần phần mềm nằm bên dưới 1 hệ quản trị cơ sở dữ liệu (Database management system – DBMS), được dùng để tạo, đọc, cập nhật và xóa dữ liệu từ 1 cơ sở dữ liệu (CSDL). Đa số các DBMS cung cấp các API cho phép người dùng tương tác với những engine này mà không cần thông qua giao diện người dùng của DBMS.

Nhiều DBMS hiện đại hỗ trợ nhiều storage engine trong cùng 1 CSDL.

 2. Các storage engine trong MySQL

MySQL hỗ trợ nhiều storage engine dùng để xử lý các loại bảng khác nhau. Bao gồm các engine hỗ trợ giao dịch và các engine không hỗ trợ giao dịch.

Từ phiên bản 5.1, máy chủ MySQL sử dụng kiến trúc pluggable storage engine cho phép các storage engine được nạp vào và gỡ bỏ khỏi 1 máy chủ MySQL đang chạy.

Trước phiên bản MySQL 5.1.38, kiến trúc này chỉ hỗ trợ cho các nền tảng Unix.

Để xác định những storage engine được hỗ trợ bởi máy chủ, chúng ta có thể sử dụng khai báo SHOW ENGINES như sau:

mysql> SHOW ENGINES\G;
*************************** 1. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES

*************************** 2. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO

*************************** 3. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO

*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO

*************************** 5. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO

*************************** 6. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL

*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO

*************************** 8. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO

*************************** 9. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO

9 rows in set (0.00 sec)

Các storage engine được hỗ trợ trong MySQL:

  • MyISAM: storage engine mặc định của MySQL và được sử dụng nhiều nhất trên Web, kho dữ liệu và các môi trường ứng dụng khác. MyISAM được hỗ trợ trong tất cả cấu hình của MySQL, và là engine mặc định trừ khi chúng ta cấu hình MySQL sử dụng engine khác.
  • InnoDB: là storage engine hỗ trợ giao dịch của MySQL, có các chức năng commit, rollback, và phục hồi lỗi để bảo vệ dữ liệu người dùng. InnoDB khóa dữ liệu theo từng dòng khi ghi, cập nhật, xóa và không khóa dữ liệu khi đọc, việc này giúp tăng số lượng người sử dụng đồng thời và tăng hiệu năng. InnoDB lưu trữ dữ liệu người dùng trong các chỉ mục dưới dạng cluster để giảm lượng I/O cho các truy vấn chung dựa trên khóa chính. Để duy trì toàn vẹn dữ liệu, InnoDB cũng hỗ trợ khóa ngoại FOREIGN KEY cho các ràng buộc tham chiếu toàn vẹn.
  • Memory: Lưu trữ tất cả dữ liệu trong RAM, cho việc truy cập nhanh hơn trong môi trường đòi hỏi các tra cứu tham chiếu nhanh. Storage engine này trước đây có tên là HEAP engine.
  • Merge: Cho phép người quản trị CSDL MySQL hay người phát triển nhóm các bảng MyISAM giống nhau và tham chiếu chúng như 1 đối tượng.
  • Archive: cung cấp giải pháp cho việc lưu trữ và lấy lượng lớn thông tin lịch sử, lưu trữ, hay kiểm toán an ninh hiếm khi được tham chiếu.
  • Federated: cung cấp khả năng liên kết các máy chủ MySQL riêng biệt để tạo ra 1 CSDL luận lý từ nhiều máy chủ vật lý. Rất tốt cho các môi trường phân tán.
  • NDB (hay được biết như là NDBCLUSTER) – storage engine theo cluster này đặc biệt phù hợp cho các ứng dụng yêu cầu thời gian hoạt động và tính sẵn sàng cao.
  • CSV: Lưu trữ dữ liệu trong các tập tin văn bản trong đó các giá trị được phân tách bởi dấu phẩy. Chúng ta có thể sử dụng engine CSV để dễ dàng trao đổi dữ liệu giữa các phần mềm và ứng dụng khác cho phép nhập và xuất dữ liệu theo định dạng CSV.
  • Blackhole: engine này chấp nhận nhưng không lưu trữ dữ liệu và việc lấy dữ liệu luôn trả về 1 tập rỗng. Chức năng này có thể được dùng trong thiết kế CSDL phân tán nơi dữ liệu được nhân bản tự động, nhưng không được lưu trữ cục bộ.
  • Example: engine này không làm gì cả. Chúng ta có thể tạo 1 bảng với engine này, nhưng không có dữ liệu nào được lưu trữ trong nó hay được lấy ra từ nó. Mục đích của engine này là để phục vụ như 1 ví dụ trong mã nguồn MySQL mô tả làm sao để viết 1 storage engine mới.

Điều quan trọng cần nhớ là chúng ta không bị bắt buộc phải sử dụng cùng 1 storage engine cho toàn bộ máy chủ hay CSDL, chúng ta có thể sử dụng 1 storage engine khác nhau cho mỗi bảng trong CSDL của chúng ta.

Feature MyISAM Memory InnoDB Archive NDB
Storage limits 256TB RAM 64TB None 384EB
Transactions No No Yes No Yes
Locking granularity Table Table Row Table Row
MVCC No No Yes No No
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No Yes[a] No No
B-tree indexes Yes Yes Yes No No
T-tree indexes No No No No Yes
Hash indexes No Yes No[b] No Yes
Full-text search indexes Yes No Yes[c] No No
Clustered indexes No No Yes No No
Data caches No N/A Yes No Yes
Index caches Yes N/A Yes No Yes
Compressed data Yes[d] No Yes[e] Yes No
Encrypted data[f] Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Replication support[g] Yes Yes Yes Yes Yes
Foreign key support No No Yes No No
Backup / point-in-time recovery[h] Yes Yes Yes Yes Yes
Query cache support Yes Yes Yes Yes Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes

[a] InnoDB support for geospatial indexing is available in MySQL 5.7.5 and higher.

[b] InnoDB utilizes hash indexes internally for its Adaptive Hash Index feature.

[c] InnoDB support for FULLTEXT indexes is available in MySQL 5.6.4 and higher.

[d] Compressed MyISAM tables are supported only when using the compressed row format. Tables using the compressed row format with MyISAM are read only.

[e] Compressed InnoDB tables require the InnoDB Barracuda file format.

[f] Implemented in the server (via encryption functions), rather than in the storage engine.

[g] Implemented in the server, rather than in the storage engine.

[h] Implemented in the server, rather than in the storage engine.

 Table 14.1 Storage Engine Features

 

Discussion

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.