MySQL提供了各種資料庫引擎來達到不同的應用,例如某些應用需要保證交易成功,有的則要求快速的運算能力,而這裡所介紹的TokuDB,則可滿足有大量插入要求及有效縮小資料庫容量的需求。
在許多的企業中,為了能方便及集中管理Log資訊,常會架設集中式的Log管理系統,將許多主機或設備所產生的Log資訊集中到中央控管的資料庫內。
在實作上,有許多解決方案可達到此類要求,但在實際運作一段時間後,可能都會遇到效能的問題,亦即因為所要收集的資料過於龐大,以致於要接收的資料庫主機無法承受大量的資料而發生預期之外的錯誤,最常見的是漏接Log資訊。並且,Log資料過於龐大,對於硬碟儲存空間也是一個挑戰。
接收Log資訊的動作對資料庫而言,即是插入(Insert)的動作,因此提高插入的效能,即可有效地解決漏接Log的機率。
也因此,一個著重在插入效能及具有高資料庫資料壓縮比率(可即時將所接收到的Log資訊壓縮,以降低資料的容量),就是此類解決方案中最重要的考量。
本文中將介紹一個支援MySQL的第三方資料庫引擎「TokuDB」,此種資料庫引擎的主要特性是著重在高插入(Insert)效能及高資料壓縮比率(可有效縮小資料容量),此次實作所需準備的套件如表1所示。
表1 實作所需的套件
認識MySQL資料庫引擎
MySQL資料庫軟體有一個與其他資料庫軟體不同的特色,在於它提供了不同類型的資料庫引擎,以供使用者根據不同的需求來選擇,藉此提高資料庫應用的效能。
如果想知道MySQL資料庫支援那些資料庫引擎,可在登入至MySQL資料庫後,以「show ENGINES;」指令來查詢所使用的MySQL資料庫能夠支援那些資料庫引擎,如圖1所示,其中最常見的預設資料庫引擎是MyISAM。
|
▲圖1 執行「show ENGINES;」指令查詢MySQL資料庫支援那些資料庫引擎。 |
在MySQL 5.5之前的版本,當使用者新建資料庫時,預設使用的資料庫引擎為MyISAM,而之後則更改為InnoDB。接下來,簡略說明MySQL資料庫軟體所內建幾種常見的資料庫引擎類型。
MyISAM
MyISAM是早期MySQL所支援的資料庫引擎之一,其優勢在於連結執行速度快,但此種資料庫引擎並不支援交易(Transaction)功能,所謂的交易指的是資料庫確保一筆交易可完整執行的機制。
假如一筆交易可能需要多次的資料庫動作(如新增或更新)才能完成,交易機制就需要確保當所有的資料庫動作均成功執行時才以提交(Commit)的方式來完成此項交易。
反之,如果交易在執行途中發生問題,以致於無法完成交易,即可回復到交易之前的狀態(Rollback)用來回復為執行此筆交易之前所執行的動作,如更新(Update)、刪除(Delete)、新增(Insert)等資料庫動作。
此種資料庫引擎主要是應用在對於無需交易要求或以查詢(Select)、新增(Insert)為主的應用,這時就可以選用此種類型。
MyISAM資料表在建立後會在磁碟上新增三種類型的檔案,相關類型說明如下所述:
.frm:儲存資料庫表格的定義
.MYD:儲存資料庫表格內的記錄資料
.MYI:儲存資料庫表格內索引(Index)的資料
InnoDB
InnoDB資料庫引擎提供交易(Transaction)安全的機制,可在交易無法完全執行成功時,提供回復(Rollback)功能來回復之前所執行的資料庫動作。此種的資料庫類型通常運用在對於交易的完整性有嚴格要求的應用上。
Memory
就純粹以速度來比較,記憶體的運算速度是遠超過以磁碟來運算的速度,因此MySQL資料庫特別提供利用記憶體(Memory)的容量來儲存資料庫表格(Table)的相關資料。