如何选择存储引擎
前面介紹了比較常用的存儲引擎,以及他們所使用的場景,比如我們沒有介紹到的存儲引擎,也是一種事務(wù)型的,比較有發(fā)展?jié)摿Φ拇鎯σ?還有很多,MYSQL使用的存儲引擎種類非常多,從這么多存儲引擎中,怎樣來選擇存儲引擎呢,可以說大部分情況下呢,選擇Innodb存儲引擎呢,都是正確的,除非你要用到innodb引擎所不具備的特性,并且沒有其他方法替代的時候呢,我們就應(yīng)該選擇其他的存儲引擎,否則都應(yīng)該使用innodb存儲引擎,來對我們的應(yīng)用進(jìn)行數(shù)據(jù)存儲,如果我們非要從眾多存儲引擎中進(jìn)行篩選,而不想選用innodb存儲引擎的話,可以參考以下幾個因素,首先我們要考慮我們的應(yīng)用是否需要事務(wù)的支持,如果應(yīng)用需要事務(wù)支持,innodb是目前最穩(wěn)定,并且經(jīng)過驗證的存儲引擎,此外cocodb也是一種選擇,只不過cocodb還不是很完善,不太建議大家在生產(chǎn)環(huán)境進(jìn)行使用,如果不需要事務(wù),并且主要是做select和insert操作,那么myisam也是可以使用,進(jìn)一步來說,如果只有insert,連select都很少的話,那么也可以使用archive這種存儲引擎,比如大部分的日志型的應(yīng)用,符合這一特性,另外要參考的條件就是備份,也會影響到堆存儲引擎的選擇,如何可以定期的根據(jù)服務(wù)器,進(jìn)行備份的話,那么備份因素可以進(jìn)行忽略,但是在生產(chǎn)環(huán)境中,數(shù)據(jù)庫服務(wù)器基本上是不能有這樣的條件的,所以我們就必須要選擇在線熱備的引擎,而前面提到的存儲引擎中呢,Innodb有免費的在線熱備方案,其他存儲引擎呢,要么不能在線熱備,要么就只能有收費的方案,在這里提一下大家常用的mysqldump呢,并不能算是一種熱備的方案,一方面mysqldump呢,使用的是邏輯備份,而另一方面呢,mysqldump為了保證數(shù)據(jù)的一致性呢,必須要對進(jìn)行備份的數(shù)據(jù)進(jìn)行加鎖,所以他不是一種在線熱備方案,而奔潰恢復(fù)呢,也是我們在選擇存儲引擎時要考慮的一個問題,當(dāng)數(shù)據(jù)量比較大的時候,系統(tǒng)奔潰后,快速恢復(fù)是一個需要考慮的問題,相對而言,MYISAM損壞的概念要比innodb要高很多,而且恢復(fù)速度也要更慢,因此即使不需要事務(wù)支持,很多時候我們也要選擇innodb數(shù)據(jù)引擎,最后就要考慮存儲引擎的特有特性了,有些應(yīng)用依賴有些存儲引擎所獨有的特性,比如有些應(yīng)用依賴btree索引,來進(jìn)行優(yōu)化,那么就要選擇innodb存儲引擎,另外有些應(yīng)用需要使用搜索,在這種MYSQL服務(wù)器下呢,也就只能使用MYISAM存儲引擎,當(dāng)然如果你使用的是MYSQL5.7以后版本的話,那么你還是 要使用Innodb存儲引擎,因為在MYSQL5.7之后呢,innodb已經(jīng)支持這種搜索,相關(guān)的函數(shù)應(yīng)用了,在選擇存儲引擎這種問題下呢,還有一點要注意的是,除非萬不得已,否則就不要混合使用多種存儲引擎,要不然呢會帶來一些復(fù)雜的問題,以及一些潛在的bug,比如混合使用myisam存儲引擎,innodb存儲引擎,可以說這種情況呢,還是非常常見的,但這種混合使用存儲引擎呢,一旦在一個事務(wù)中兩種存儲引擎的表進(jìn)行操作,如果這個事務(wù)進(jìn)行了回滾,那么只有innodb的表是可以進(jìn)行回滾的,而myisam的表中的數(shù)據(jù)是不能回滾的,這樣就會給應(yīng)用帶來邏輯上的問題,就算我們不考慮事務(wù)的因素,混合使用兩種存儲引擎呢,無法實現(xiàn)完全的在線熱備,這樣就可能會對備份中呢MYISAM表就會帶來大量的阻塞,同樣數(shù)據(jù)庫的性能就會帶來比較大的影響,我曾經(jīng)就遇到過這種情況,所以建議大家,不要混合使用存儲引擎
?
總結(jié)
- 上一篇: MySQL常用存储引擎之Federate
- 下一篇: 内存配置相关参数