Storage Engines/table types (công cụ lưu trữ) trong MySQL
- 22-03-2023
- Toanngo92
- 0 Comments
Storage engine hay chúng ta có thể dịch hiểu nôm na là kiểu bảng là cách mà MySQL lưu trữ dữ liệu trên đĩa cứng. Mỗi database sẽ được MySQL lưu dưới dạng thư mục con của thư mục data nằm trong thư mục MySQL . Khi tạo bảng, MySQL sẽ tạo ra một file có tên trùng với tên bảng đó và có đuôi file định dạng .frm ở trong thư mục database. Mỗi loại có một ưu điểm và nhược điểm khác nhau, điều này rất quan trọng khi triển khai ứng dụng lớn, nếu chúng ta hiểu và tận dụng được các ưu điểm đó thì ứng dụng của sẽ thực sự rất tối ưu từ hiệu năng cho tới kích thước cơ sở dữ liệu.
Mục lục
Các Storage Engine trong MySQL
MyISAM
MyISAM là phần mở rộng cho công cụ lưu trữ ISAM cũ, các bảng được lưu trữ dưới dạng MyISAM được tối ưu hóa cho tốc độ nén. Kích thước của MyISAM có thẻ lên tới 256TB, rất là lớn phải không các bạn. Ngoài ra bảng kiểu MyISAM có thể được nén và chỉ đọc để tăng tính truy vấn lấy dữ liệu. Lúc MYSQL khởi động sẽ kiểm tra các bảng có kiểu MyISAM nếu bị lỗi thì nó sẽ fix lôi luôn, nên nếu ban lưu trữ cách này sẽ không an toàn.
Đặc điểm:
- Chỉ có thể đọc table đồng thời mà không thể ghi đồng thời
- Tự sữa chữa và phục hồi dữ liệu tốt sau khi hệ thống bị crash.
- Hỗ trợ tìm kiếm full-text index.
- Tăng tốc độ ghi nhờ không ghi dữ liệu vào ổ cứng ngay mà ghi vào buffer trên RAM trước, sau một khoảng thời gian mới ghi vào ổ cứng.
- Hỗ trợ nén dữ liệu giúp tăng tốc độ đọc dữ liệu nhưng dữ liệu sau khi nén không thể cập nhật được.
Thông thường các bảng cần truy vấn nhanh như bài viết, danh mục, sản phẩm, … chúng ta sử dụng có thể sử dụng engine MyISAM để cải thiện tốc độ truy vấn. Các phiên bản bé hơn 5.5 thì MyISAM là engine bảng mặc định khi bạn tạo mới một bảng , kể từ bản 5.5 trở đi thì mặc định nó lấy kiểu InnoDB.
InnoDB
Các bảng sử dụng engine InnoDB có đầy đủ các tính năng ACID-compliant và transaction và nó cũng được tối ưu hóa hiệu năng. Bảng InnorDB hỗ trợ khóa ngoại (Foreign Key), commit, rollback trong transaction. Kích thước của InnoDB có thể lên tới 64TB, tuy nhiên so sánh thì vẫn nhỏ hơn so với MyISAM
Đặc điểm
- Có khả năng phục hồi, sửa chữa tốt.
- Là engine phức tạp nhất trong các engine của MySQL.
- Hỗ trợ MVCC (Multiversion Concurrency Control) do đó bảng có thể đọc và ghi đồng thời.
- Sử dụng clustered index do đó hiệu năng tìm kiếm theo primary key rất cao.
- Lưu dữ liệu trên 1 file (thuật ngữ gọi là tablespace).
- Hỗ trợ transaction.
Cũng như MyISAM lúc MySQL khởi động nó cũng kiểm tra các table nếu có lỗi thì sẽ báo hoặc tự fix
MERGE
Bảng MERGE là bảng ảo, là sự kết hợp của nhiều bảng MyISAM có cấu trúc tương tự và đưa chúng vào một bảng duy nhất, chính vì vậy kiểu MERGE ta có thể hiểu nó có quy tắc giống như MyISAM . Các bảng MERGE không có indexes riêng của mình mà nó sử dụng indexes của các bảng con.
Sử dụng bảng MERGE bạn có thể tăng tốc độ hiệu suất trong truy vấn tham gia nhiều bảng. MYSQL chỉ cho phép bạn thực hiện các thao tác SELECT, INSERT, UPDATE, DELETE trên bảng đó, nếu bạn DROP một table nằm trong danh sách table của bảng MERGE thì chỉ có các đặc điểm riêng của nó bị loại bỏ và các bảng bên dưới sẽ không bị ảnh hưởng.
Memory
Bảng memory được lưu trữ trong bộ nhớ và sử dụng chỉ số băm để có được tốc độ nhanh hơn các bảng MyISAM. Vòng đời sống của dữ liệu phụ thuộc vào thời gian sống của Database Server. Ta có thể hiểu store engine memory giống như bộ nhớ HEAP.
Archive
Archive là engine cho phép bạn lưu trữ số lượng lớn các bản ghi mà mục đích chỉ để lưu trữ và được chuyển sang định dạng nén để giảm bớt không gian lưu trữ. Nó sử dụng thư viện zlib để nén dữ liệu.
Các bảng lưu trữ chỉ cho phép thực hiện hai thao tác là INSERT và SELECT và nó không hỗ trợ chỉ mục indexes, chính vì vậy khi bạn thực hiện lệnh select nó sẽ quét toàn bộ bảng (table scan) nên tốc độ sẽ chậm hơn,tuy nhiên có ưu điểm là giảm được kích thước lưu trữ.
CSV
Trong MYSQL thì với kiểu này nó sẽ lưu các trường dữ liệu sẽ được ngăn cách nhau bởi dấu phẩy, đây cũng là cách lưu trữ rất giống với NO-SQL.
CSV table không hỗ trợ dữ liệu NULL và khi bạn truy vấn đọc (select) thì nó sẽ quét toàn bộ bảng (table scan) giống như Archive.
FEDERATED
FEDERATED storage engine cho phép bạn quản lý dữ liệu máy chủ từ xa mà không cần sử dụng cluster. Các bảng Federated local sẽ không có dữ liệu mà khi bạn truy vấn dữ liệu thì dữ liệu sẽ được kéo về bảng này.
Kiểm tra MySQL có hỗ trợ những engine nào, sử dụng lệnh:
mysql> SHOW ENGINES;
Trong thực tế, 2 engine chủ yếu sử dụng là innoDB và MyISAM, tuy nhiên, tùy bối cảnh cụ thể, chúng ta có thể lựa chọn engine để lưu trữ dữ liệu một cách hợp lý.