天天看點

MySQL存儲引擎與适用場景詳解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

5 BLACKHOLE - 黑洞引擎

支援事務,而且支援mvcc的行級鎖,寫入這種引擎表中的任何資料都會消失,主要用于做日志記錄或同步歸檔的中繼存儲,該存儲引擎除非有特别目的,否則不适合使用。

适用場景1

使用BLACKHOLE存儲引擎的表不存儲任何資料,但如果mysql啟用了二進制日志,SQL語句被寫入日志(并被複制到從伺服器)。這樣使用BLACKHOLE存儲引擎的mysqld可以作為主從複制中的中繼重複器或在其上面添加過濾器機制。例如,假設你的應用需要從伺服器側的過濾規則,但傳輸所有二進制日志資料到從伺服器會導緻較大的網絡流量。在這種情況下,在主伺服器主機上建立一個僞從伺服器程序。

MySQL存儲引擎與适用場景詳解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

場景2:

如果配置一主多從的話,多個從伺服器會在主伺服器上分别開啟自己相對應的線程,執行binlogdump指令而且多個此類程序并不是共享的。為了避免因多個從伺服器同時請求同樣的事件而導緻主機資源耗盡,可以單獨建立一個僞的從伺服器或者叫分發伺服器。

MySQL存儲引擎與适用場景詳解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

ARCHIVE

差別于InnoDB和MyISAM,ARCHIVE提供壓縮功能,擁有高效地插入。

但不支援索引,是以查詢性能較差。

支援insert、replace和select操作,不支援update和delete。

适用場景

資料歸檔

壓縮比非常高,存儲空間大概是innodb的10-15分之一,是以存儲曆史資料非常适合,由于不支援索引也不能緩存索引和資料,不适合作為并發通路表。

日志表

因為高壓縮和快速插入的特點。

但前提是不經常對該表進行查詢。

PERFORMANCE_SCHEMA:

該引擎主要用于收集資料庫伺服器性能參數。這種引擎提供以下功能:提供程序等待的詳細資訊,包括鎖、互斥變量、檔案資訊;儲存曆史的事件彙總資訊,為提供MySQL伺服器性能做出詳細的判斷;對于新增和删除監控事件點都非常容易,并可以随意改變mysql伺服器的監控周期,例如(CYCLE、MICROSECOND)。 MySQL使用者是不能建立存儲引擎為PERFORMANCE_SCHEMA的表。

場景: DBA能夠較明細得了解性能降低可能是由于哪些瓶頸。

Merge

Merge允許将一組使用MyISAM存儲引擎的并且表結構相同(即每張表的字段順序、字段名稱、字段類型、索引定義的順序及其定義的方式必須相同)的資料表合并為一個表,友善了資料的查詢。

場景:MySQL中沒有物化視圖,視圖的效率極低,故資料倉庫中資料量較大的每天、每周或者每個月都建立一個單一的表的曆史資料的集合可以通過Merge存儲引擎合并為一張表。

Federated

該存儲引擎可以 将不同的MySQL伺服器聯合起來,邏輯上組成一個完整的資料庫。非常适合資料庫分布式應用。

可以使你在本地資料庫中通路遠端資料庫中的資料,針對federated存儲引擎表的查詢會被發送到遠端資料庫的表上執行,本地不存儲任何資料。

場景: dblink。

MySQL存儲引擎與适用場景詳解(中)5 BLACKHOLE - 黑洞引擎ARCHIVE

缺點

  1. 對本地虛拟表的結構修改,并不會修改遠端表的結構
  2. truncate 指令,會清除遠端表資料
  3. drop指令隻會删除虛拟表,并不會删除遠端表
  4. 不支援 alter table 指令
  5. select count(*), select * from limit M, N 等語句執行效率非常低,資料量較大時存在嚴重問題,但若按主鍵或索引列查詢,則很快,如以下查詢就非常慢(假設 id 為主索引)
select id from db.tablea where id >100 limit 10 ;
      

而以下查詢就很快:

select id from db.tablea where id >100 and id<150      

如果虛拟虛拟表中字段未建立索引,而實體表中為此字段建立了索引,此種情況下,性能也相當差。但是當給虛拟表建立索引後,性能恢複正常。

類似 where name like "str%" limit 1 的查詢,即使在 name 列上建立索引,也會導緻查詢過慢,是因為federated會将所有滿足條件的記錄讀取到本地,再進行 limit 處理。