BLACKHOLE存儲(chǔ)引擎就像“黑洞”一樣,它接收數(shù)據(jù)但丟棄它而不是存儲(chǔ)它。取回總是返回空集:
mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM test;
Empty set (0.00 sec)
當(dāng)你創(chuàng)建一個(gè)BLACKHOLE表的時(shí)候,服務(wù)器在數(shù)據(jù)庫(kù)目錄創(chuàng)建一個(gè)表定義文件。文件用表的名字開(kāi)頭,并且有一個(gè).frm擴(kuò)展名。沒(méi)有其它文件關(guān)聯(lián)到這個(gè)表格。
BLACKHOLE存儲(chǔ)引擎支持所有種類的索引。
要允許這個(gè)存儲(chǔ)引擎,在你建立MySQL之時(shí)使用--with-blackhole-storage-engine選項(xiàng)來(lái)configure。BLACKHOLE存儲(chǔ)引擎在MySQ供應(yīng)的服務(wù)器二進(jìn)制版里可以找到;通過(guò)查看SHOW ENGINES或SHOW VARIABLES LIKE 'have%'的輸出,你可以確定你的版本是否支持這個(gè)引擎。
到BLACKHOLE表的插入不存儲(chǔ)任何數(shù)據(jù),但如果二進(jìn)制日志被允許,SQL語(yǔ)句被寫入日志(并被復(fù)制到從服務(wù)器)。這可以有用幫助地作為重復(fù)器或過(guò)濾器機(jī)制。例如,假設(shè)你的應(yīng)用需要從服務(wù)器側(cè)的過(guò)濾規(guī)則,但傳輸所有二進(jìn)制日志數(shù)據(jù)到從服務(wù)器首先導(dǎo)致過(guò)多交通的結(jié)果。在這種情況下,在主服務(wù)器主機(jī)上建立一個(gè)偽從服務(wù)器進(jìn)程,它的存儲(chǔ)引擎是BLACKHOLE,描述如下:
主服務(wù)器寫它的二進(jìn)制日志。偽mysqld進(jìn)程作為從服務(wù)器,應(yīng)用期望的replicate-do和replicate-ignore規(guī)則的合并,并且寫一個(gè)新的,被過(guò)濾的屬于它自己的二進(jìn)制日志 。(請(qǐng)參閱6.8節(jié),“復(fù)制啟動(dòng)選項(xiàng)”)。這個(gè)已過(guò)濾日志被提供給從服務(wù)器。
既然偽進(jìn)程不確實(shí)地存儲(chǔ)任何數(shù)據(jù),只有很小的由在復(fù)制主服務(wù)器主機(jī)上額外的mysqld進(jìn)程招致的處理開(kāi)支。這個(gè)類型的建立可以用額外復(fù)制從服務(wù)器來(lái)重復(fù)。
其它可能對(duì)BLACKHOLE存儲(chǔ)引擎的使用包括:
· 轉(zhuǎn)儲(chǔ)文件語(yǔ)法的驗(yàn)證。
· 來(lái)自二進(jìn)制日志記錄的開(kāi)銷測(cè)量,通過(guò)比較允許二進(jìn)制日志功能的BLACKHOLE的性能與禁止二進(jìn)制日志功能的BLACKHOLE的性能。
· 因?yàn)锽LACKHOLE本質(zhì)上是一個(gè)“no-op” 存儲(chǔ)引擎,它可能被用來(lái)查找與存儲(chǔ)引擎自身不相關(guān)的性能瓶頸。