初識MariaDB存儲引擎


在看MariaDB的存儲引擎之前,可以先了解MySQL存儲引擎。

MySQL常用的存儲引擎:

  • MyISAM存儲引擎:是MySQL的默認存儲引擎。MyISAM不支持事務、也不支持外鍵,但其訪問速度快,對事務完整性沒有要求。 

MyISAM表還支持3中不同的存儲格式: 

1 靜態表 
2 動態表 
3 壓縮表 

靜態表是默認的存儲格式,靜態表中的字段都是非變長的字段,優點是:存儲非常迅速,容易緩存,出現故障容易恢復;缺點是:占用的空間通常比動態表多。(注意: 在存儲時,列的寬度不足時,用空格補足,當時在訪問的時候並不會得到這些空格) 
動態表的字段是變長的,優點是:占用的空間相對較少,但是頻繁地更新刪除記錄會產生碎片,需要定期改善性能,並且出現故障的時候恢復相對比較困難。 
壓縮表占用磁盤空間小,每個記錄是被單獨壓縮的,所以只有非常小的訪問開支。 

MyISAM表存儲為三個文件:.frm文件存儲表定義。數據文件的擴展名為.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)

  • InnoDB存儲引擎:提供了具有提交、回滾和崩潰恢復能力的事務安全。但是比起MyISAM存儲引擎,InnoDB寫的處理效率差一些並且會占用更多的磁盤空間以保留數據和索引。 
  • MEMORY(heap)存儲引擎:memory實際是heap的替代品。使用存在內存中的內容來創建表。每個MEMORY表只實際對應一個磁盤文件(只包含表定義)。
    • 優點:MEMORY類型的表訪問非常得快,因為它的數據是放在內存中的,並且默認使用HASH索引
    • 缺點:一旦服務關閉,表中的數據就會丟失掉。其只支持表鎖,並發性能較差,並且不支持TEXT和BLOB列類型.存儲變長字段(varchar)時是按照定常字段(char)的方式進行的,因此會浪費內存
    • 關於該存儲引擎的淺析:http://www.jb51.net/article/29039.htm
  • MERGE存儲引擎:是一組MyISAM表的組合,這些MyISAM表必須結構完全相同。MERGE表本身沒有數據,類似於一個視圖.對MERGE類型的表進行查詢、更新、刪除的操作,就是對內部的MyISAM表進行的。似乎看到分區表的影子,但完全是兩種不同的東西.

      官網說明:https://www.mariadb.com/kb/en/merge/

  • archive存儲引擎:這種類型只支持select 和 insert語句,而且不支持索引。非常適合存儲大量的獨立的作為歷史記錄的數據。Archive擁有高效的插入速度,但其對查詢的支持相對較差常,應用於日志記錄和聚合分析方面。
  • Federated: 將不同的Mysql服務器聯合起來,邏輯上組成一個完整的數據庫。非常適合分布式應用
  • CSV: 邏輯上由逗號分割數據的存儲引擎。它會在數據庫子目錄里為每個數據表創建一個.CSV文件。這是一種普通文本文件,每個數據行占用一個文本行。CSV存儲引擎不支持索引。
  • BlackHole :黑洞引擎,寫入的任何數據都會消失,一般用於記錄binlog做復制的中繼

 MYSQL 中的部分存儲引擎的特性:

Attribute

MyISAM

Heap

BDB

InnoDB

Transactions(支持事務)

No

No

Yes

Yes

Lock granularity(鎖粒度)

Table

Table

Page (8 KB)

Row

Storage(存儲)

Split files

In-memory

Single file per table

Tablespace(s)

Isolation levels(隔離級別)

None

None

Read committed

All

Portable format(可移植性)

Yes

N/A

No

Yes

Referential integrity(參照完整性,似乎是對外鍵的支持)

No

No

No

Yes

Primary key with data

No

No

Yes

Yes

MySQL caches data records

No

Yes

Yes

Yes

Availability(支持的版本)

All versions

All versions

MySQL-Max

All Versions

 

 


MariaDB 與 MySQL 相比較

MariaDB 提供以下特性:

  • XtraDB 替換 InnoDB,XtraDB 是 Percona 開發維護的 InnoDB 威力加強版,整合 Google、Facebook 等公司和 MySQL 社區的補丁。
  • Aria 存儲引擎和 Sphinx 存儲引擎
  • 基於 Gelera Cluster 的 MariaDB 集群方案
  • 多主復制(將在 MariaDB 10.0 實現,由淘寶貢獻)
  • Cassandra 存儲引擎(將在 MariaDB 10.0 實現)

,MariaDB 更強的地方在於:

  • Aria(原名Maria) 存儲引擎

Aria 存儲引擎是默認被編譯進MariaDB 5.1里的,並且在mysqld啟動的時候就要求同時啟動.

另外,內部的磁盤表是Aria表格式而不是MyISAM表格式.這將使某些GROUP BYDISTINCT請求速度更快,因為Aria有比MyISAM更好的緩沖機制.包含Aria是MariaDB 5.1和MySQL 5.1之間的一個不同.

There are also some new options to CREATE TABLE:

    • TRANSACTIONAL= 0 | 1 : Transactional means crash-safe for Aria
    • PAGE_CHECKSUM= 0 | 1 : If index and data should use page checksums for extra safety.
    • TABLE_CHECKSUM= 0 | 1 : Same as CHECKSUM in MySQL 5.1
    • ROW_FORMAT=PAGE : The new cacheable row format for Aria tables. Default row format for Aria tables and only row format that can be used if TRANSACTIONAL=1. To emulate MyISAM, use ROW_FORMAT=FIXED orROW_FORMAT=DYNAMIC
    • CHECKSUM TABLE now ignores values in NULL fields. This makes CHECKSUM TABLE faster and fixes some cases where same table definition could give different checksum values depending on row format. The disadvantage is that the value is now different compared to other MySQL installations. The new checksum calculation is fixed for all table engines that uses the default way to calculate and MyISAM which does the calculation internally. Note: Old MyISAM tables with internal checksum will return the same checksum as before. To fix them to calculate according to new rules you have to do an ALTER TABLE. You can use the old ways to calculate checksums by using the option --old to mysqld or set the system variable '@@old' to 1 when you doCHECKSUM TABLE ... EXTENDED;
    • At startup Aria will check the Aria logs and automatically recover the tables from last checkpoint if mysqld was not taken down correctly.
  • PBXT 存儲引擎

 

PBXT 是 MariaDB 附帶的一種存儲引擎,PBXT 在 MariaDB 的 5.1/5.2/5.3 版本中存在,但從 MariaDB 5.5 開始就不再提供 PBXT 存儲引擎,而且以后也將不再提供。

原因是 PBXT 已經不再繼續開發了,當然,在 MariaDB 的源碼發行中還將包含它的源碼,但你需要自行 構建 才能使用。

 

Percona XtraDB 是 InnoDB 存儲引擎的增強版,被設計用來更好的使用更新計算機硬件系統的性能,同時還包含有一些在高性能環境下的新特性。

 

XtraDB 存儲引擎是完全的向下兼容,在 MariaDB 中,XtraDB 存儲引擎被標識為"ENGINE=InnoDB",這個與 InnoDB 是一樣的,所以你可以直接用XtraDB 替換掉 InnoDB 而不會產生任何問題。

Percona XtraDB 包含有所有 InnoDB's 健壯性,可依賴的 ACID 兼容設計和高級 MVCC 架構。XtraDB 在 InnoDB 的堅實基礎上構建,使 XtraDB 具有更多的特性,更好調用,更多的參數指標和更多的擴展。

從實踐的角度來看,XtraDB 被設計用來在多核心的條件下更有效的使用內存和更加方便,更加可用。

新的特性被用來降低 InnoDB 的局限性。

MariaDB 對存儲引擎新特性的選擇基於用戶的需求和現實環境中的真實需求。

 

  • FederatedX 存儲引擎 分布式存儲 
  • SphinxSE 存儲引擎 用於全文檢索

  官網介紹:https://www.mariadb.com/kb/en/about-sphinxse/

  • 更快的復制查詢處理
  • 線程池
  • 更少的警告和bug
  • 運行速度更快
  • 多的 Extensions (More index parts, new startup options etc)
  • 更好的功能測試
  • 數據表消除
  • 慢查詢日志的擴展統計
  • 支持對 Unicode 的排序

 

MariaDB存儲引擎小結
引擎引擎 優點 缺點 適用場景 問題思考
Aria        
XtraDB 支持事務

1寫入的效率較差
2占用更多的存儲空間

需要事務支持的生產環境  
FederatedX 支持分布式系統   需要使用分布式系統的情況

1.和單機相比的讀寫效率如何?
2.如某個RDBMS故障會發生什么?

SphinxSE  支持全文檢索  

需要全文檢索的情景
使用前要單獨安裝

 
MEMORY  讀寫速度快 1.重啟后數據清空
2.占用內存空間
 使用讀頻繁的基礎代碼表

可以創建Aria表再通過觸發器定入memory表
aria表負責更新,memory表負責讀取
重啟后通過aria表初始化memory表

MERGE 合並多個同構表進行操作

1.執行效率沒有提升
2.本身沒有任何約束

如:將數據進行分表存儲(表的數
量隨時間增長)
又需要對這些表
進行聚合操作,這時可以使用merge

感覺只是在使用的時候方便
並沒有帶來效率的提升
約束完全由基礎表控制,這樣會在多個表中
產生重復數據
archive  插入速度非常快

1.只支持插入和查找
2.不支持索引
 

 適用於日志類的,只插入不修改
且查詢較少的數據.
 
CSV        
BlackHole        

 

官網的一些建議:

Choosing the right storage engine

  • Xtradb and InnoDB is a good general transaction storage engine and usually the best choice if unsure.

   --Xtradb and InnoDB 是一種很好的通用事務存儲引擎,在無法確定如何選擇時,它也許就是一種最佳的選擇

  • MyISAM and Aria have a small footprint and allow for easy copy between systems. MyISAM is MySQL's oldest storage engine, while Aria is MariaDB's more modern improvement.

  --MyISAM and Aria占用的資源比較小,兩者是兼容的,可以很容易的在這兩個系統間進行遷移 . MyISAM是mysql最古老的存儲引擎,而Aria是MariaDB對它的更先進的改進.

  • TokuDB is a transactional storage engine which is optimized for workloads that do not fit memory, and provides a good compression ratio.

 

  • MEMORY does not write data on-disk (all rows are lost on crash) and is best-used for read-only caches of data from other tables, or for temporary work areas.

  --MEMORY 不寫數據到硬盤中(意味着重啟將丟失),最適用於緩存其它表中的數據用於只讀,或者用於臨時工作

  • The Archive storage engine is, unsurprisingly, best used for archiving.

  --Archive顧名思義最適用於存檔類的數據

 

  • CONNECT allows access to different kinds of text files and remote resources as if they were regular MariaDB tables.

 

  • SphinxSE is used as a proxy to run statements on a remote Sphinx database server (mainly useful for advanced fulltext searches).

 

  • Spider uses partitioning to provide data sharding through multiple servers.

 

  • ScaleDB is a commercial storage engine suited for large-scale online transaction processing and data warehousing.

 


 

常用的有關存儲引擎的操作命令

查看數據庫可以支持的存儲引擎:

show engines

 

查看某張表使用的存儲引擎

Show create table tablename; //顯示表的創建語句,其中包含存儲引擎信息ENGINE=XXX
show table status like ‘XXX’\G   //顯示表的當前狀態

 

 創建表時指定:

Create table XXX(
columnName(列名1)  type(數據類型)  attri(屬性設置),
columnName(列名2)  type(數據類型)  attri(屬性設置),
……..) engine = engineName

 

修改表的存儲引擎:

Alter table tableName engine =engineName

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM