Get in touch
or send us a question?
CONTACT

Các loại storage engine trong MySQL

I. STORAGE ENGINE TRONG MYSQL LÀ GÌ

Chúng ta đều biết rằng MySQL tổ chức dữ liệu dưới dạng các bảng, cột và hàng. Nhưng bạn có bao giờ thắc mắc về cách mà MySQL lưu trữ dữ liệu trên máy tính không (trên ổ cứng). Thực tế, MySQL có vài kiểu lưu trữ dữ liệu khác nhau, và người ta gọi chung các kiểu lưu trữ này là Storage engine.

Storage engine là một thuộc tính của table, không phải thuộc tính của database, của dòng hay cột. Tức bạn sẽ có quyền lựa chọn storage engine trong lúc tạo mới một table.

II. CÁC LOẠI STORAGE ENGINE

2.1 MyISAM

Trước phiên bản MYSQL 5.5, MYISAM là dạng storage engine mặc định trong lúc tạo table mà không chỉ rõ, Nhưng từ phiên bảng 5,5 trở đi thì storage engine mặc định là InnoDB.

MyISAM được thiết kế để phù hợp với những table có thao tác đọc (select) nhiều hơn các thao tác thêm-sửa-xóa, vì:

  • MyISAM sử dụng cơ chế table-level locking, nghĩa là khi có 1 thao tác thêm-sửa-xóa thì dữ liệu toàn bộ table đó bị xóa lại cho đến khi hoàn thành thì mới tiếp tục được thao tác thêm-sửa-xóa khác.
  • MyISAM là storage engine có tốc độ dọc dữ liệu nhanh nhất do có cấu trúc đơn giản.
  • MyISAM hỗ trợ index full-text, chó phép tìm kiếm full-text (nhưng giờ InnoDB cũng đã hỗ trợ)
  • MyISAM hỗ trợ nến dữ liệu giúp tăng tốc độ đọc, nhưng dữ liệu sau khi nén sẽ ko thể cập nhật được

Một số đặt điểm khác của MyISAM:

  • Không hỗ trợ transaction
  • MyISAM có thể lưu trữ dữ liệu tối da lên tới 256TB
  • Không hỗ trơ khóa ngoại
  • Hỗ trợ đánh index

2.2. InnoDB

InnoDB là storage engine mặc định (tính tới thời điểm MySQL 8.0) khi bạn tạo một table mà không chỉ rõ storage engine. Đây cũng là dạng storage engine cân bằng giữa các yếu tố về hiệu năng và độ tin cậy. Cụ thể:

  • InnoDB sử dụng cở chế row-level locking, Tức là khí có hành động thêm-sửa-xóa lên 1 record thì chỉ có record đó bị khóa lại, các bản ghi khác vẫn thực hiện thêm-sửa-xóa bình thường.
  • InnoDB có thể chứa 64TB dữ liệu
  • Hỗ trợ transaction
  • Hỗ trợ khóa ngoại
  • Hỗ trơ đánh index
  • Hỗ trợ index full-text, cho phép tìm kiếm full-text

2.3 Memory engine

Memory engine là dạng storage mà toàn bộ dữ liệu sẽ được lưu trên memory (RAM). Do được lưu trên memory, nên dữ liệu trong table này dể bị “tổn thương” (hoặc biến mất) khi gặp các vấn đề như bị cash ứng dụng, lỗi phần cứng, server reset,…. Vì thế dạng storage engine chỉ nên được sử khi dữ liệu lưu trong table là tạm thời hoặc lưu cache kết quả truy vấn từ table khác.

Ưu điểm duy nhất là tốc độ truy xuất cao

III. LỰA CHỌN STORAGE ENGINE NÀO?

Mặc dù được chia làm vài ba loại storage engine (3 cái trên là 3 cái tiêu biểu), nhưng trong thực tế InnoDB gần như là storage engine duy nhất được sử dụng ở thời điểm hiện tại. Do nó là engine cân bằng giữa mọi yếu tố. Mặt khác, nó cũng là engine mà MySQL thể hiện tốt nhất, bởi:

  • MyISAM nổi bật nhất với khả năng lưu trữ tới 256TB, nhưng thực tế chẳng ai để table của mình lớn tới vậy cả.
  • MyISAM tối ưu cho việc read-only, nhưng nếu thật sự cần read-only thì mình có nhiều phương pháp chứ không nhất thiết phải dùng tới database.
  • Memory engine là giải pháp “lưu tạm”, cũng tương tự như MyISAM để lưu tạm chúng ta cũng có nhiều phương pháp thay thế.

Vậy là bạn biết nên chọn storage engine nào cho table của bạn rồi chứ?