[ST]Kiến thức về 'Storage Engine' của MySQL

Các mục thông tin về tin học khác...
Forum rules
Nếu có ý kiến tạo thêm mục kiến thức khác ... Hãy thông báo trong đây ... để được cân nhắc tạo!
Post Reply
tthlan
Quản trị viên
Posts: 76
Joined: Tue Aug 23, 2016 8:13 am

[ST]Kiến thức về 'Storage Engine' của MySQL

Post by tthlan »

Các storage engine trong MySQL

1. STORAGE ENGINE LÀ GÌ

1 database engine (hay storage engine) là 1 thành phần phần mềm nằm bên dưới mà 1 hệ quản trị cơ sở dữ liệu (Database management system – DBMS) dùng để tạo, đọc, cập nhật và xóa (CRUD) 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 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ủ, sử dụng khai báo SHOW ENGINES như sau:

Code: Select all

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 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 cực nhanh trong môi trường đòi hỏi các tra cứu tham chiếu nhanh. 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 1 loạt các bảng MyISAM giống hệt nhau và tham chiếu chúng như 1 đối tượng.
  • Archive: cung cấp giải pháp hoàn hảo cho việc lưu trữ và lấy những 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) – engine CSDL 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 mà có thể nhập và xuất 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.
Image

[Sưu tầm] từ http://www.justpassion.net/
tthlan
Quản trị viên
Posts: 76
Joined: Tue Aug 23, 2016 8:13 am

MyISAM & Innodb & Memory

Post by tthlan »

MyISAM & Innodb & Memory – Nên dùng Storage Engine nào cho MySQL của website bạn

Nếu website của bạn sử dụng MySQL database, thì bạn có thể tùy chọn giữa các Storage Engine InnoDB, MyISAM và MEMORY sao cho phù hợp với nhu cầu của mình. Khi bạn lựa chọn đúng Storage Engine, Mysql sẽ có hiệu suất hoạt động tốt nhất , tối ưu MySQL sẽ có kết quả tốt hơn, khi đó website có thể đón được nhiều lượng truy cập nhất trước khi bạn quyết định nâng cấp VPS – Server.
  • 1. MyISAM và MySQL
    MyISAM là kiểu Storage Engine được dùng phổ biến nhất. Storage Engine này cho phép lạp chỉ mục toàn cột (Full text index) do đó nó cho tốc độ đọc truy suất nhanh nhất.
    Tuy nhiên nó lại rất kém trong việc “insert/update” – “thêm/sửa” dữ liệu. Do vậy nếu website của bạn chủ yếu là đọc như blog wordpress thì nên lựa chọn loại Storage Engine này.

    2. InnoDB trong MySQL
    Storage Engine này mới hơn MyISAM , đây là Storage Engine tốt nhất cho các diễn đàn có lượng cập nhật liên tục.
    Tốc độ insert/update/delete tốt nhất do hoạt động theo cơ chế Row Level Locking nên khi cập nhật (Thêm,xóa,sửa) 1 bảng thì chỉ có bản ghi đang bị thao tác bị khóa mà thôi, các hoạt động khác trên table này vẫn diễn ra bình thường.
    Tuy nhiên nhược điểm của nó là khi hoạt động nó tốn nhiều RAM hơn so với MyISAM.

    3. MEMORY trong MySQL
    MEMORY engine (HEAP) là engine cho tốc độ truy xuất và cập nhật tốt nhất do nó lưu trữ dữ liệu trực tiếp lên RAM. Vì thế nó được dùng làm các table chứa dữ liệu tam hay các phiên làm việc của user. Khi khởi động lại MySQL hay Server, tất cả dữ liệu sẽ bị xóa hết.

    4. Vậy Storage Engine nào thích hợp cho website bạn
    Nếu bạn làm blog (wordpress…) hay làm các trang tin tức nên dùng MyIAM để cho hiệu suât tốt nhất
    Nếu bạn làm forum, mạng xã hội thì nên sử dụng InnoDB để tốc độ insert và update dữ liệu cao nhất.
    MEMORY Storage Engine dùng cho các table có dữ liệu không quan trọng, dữ liệu tạm và thông tin làm việc của người dùng.
    Chuyển sang MyISAM làm mặc định cho MySQL so với serverut dùng InnoDB. Mục đích là tối ưu hiệu suất cho WordPress.
Post Reply