一、分庫分表、MPP和分布式數(shù)據(jù)庫的區(qū)別
1)分庫分表做法,主要是因為早期單機數(shù)據(jù)庫(主要還是MySQL這種低成本場景)下無法在一個庫一張表來承載同一業(yè)務(wù)表下所有的數(shù)據(jù),因而將數(shù)據(jù)劃分到不同的物理庫表中去,從業(yè)務(wù)視角來形成一個大的邏輯表。這樣的話能夠充分利用水平拆分能力,來存儲超大的數(shù)據(jù)集。一般拆分邏輯依賴業(yè)務(wù)給出相關(guān)的字段,配合分表規(guī)則,來做hash、range的拆分。這種方式一般通過一些富客戶端來支持用戶sql,好處很直觀,針對點查詢效率很高,插入數(shù)據(jù)效率高,但問題點很多,也不太好解決,主要在于涉及到不同分庫的sql操作,比如怎么支持跨庫表join,怎么支持分布式事務(wù)來更新,如果sql中不帶分區(qū)鍵導(dǎo)致全邏輯表查詢等等。另外,數(shù)據(jù)量越來越大時有熱點問題怎么辦,數(shù)據(jù)怎么重分布,宕機怎么恢復(fù),路由表變更怎么辦,怎么做多個實例的服務(wù)發(fā)現(xiàn),怎么做讀寫分離,等等。最終就是讓業(yè)務(wù)上做妥協(xié),最終一致性,不支持join,允許局部節(jié)點故障,等等。
2)本質(zhì)上,分庫分表中間件相當(dāng)于把數(shù)據(jù)庫解決不了的問題推到業(yè)務(wù)側(cè),讓業(yè)務(wù)參與解決或者妥協(xié)。隨著云計算平臺分布式數(shù)據(jù)庫越來越強大,分庫分表的技術(shù)會慢慢的退出歷史舞臺。簡單來說,分布式數(shù)據(jù)庫把上面的問題盡量的在數(shù)據(jù)系統(tǒng)內(nèi)部解決掉,給客戶的接口非常簡單,統(tǒng)一的endpoint,標(biāo)準(zhǔn)的數(shù)據(jù)庫協(xié)議,完整的sql支持能力,等等,但內(nèi)部一樣有各種數(shù)據(jù)分區(qū)邏輯。分布式數(shù)據(jù)庫從廣義上來說,就是實現(xiàn)數(shù)據(jù)庫語義的分布式架構(gòu)下的系統(tǒng),像云上各種OLTP和OLAP產(chǎn)品,應(yīng)該都可以稱之為分布式數(shù)據(jù)庫。分布式數(shù)據(jù)庫中最重要的就是數(shù)據(jù)怎么擺放,數(shù)據(jù)在多個機器上平均分攤持有一份數(shù)據(jù)做sharding,還是多個節(jié)點相互復(fù)制一份數(shù)據(jù)做主備,還是利用底層共享存儲共享一份完整數(shù)據(jù)集,衍生出不一樣的系統(tǒng)架構(gòu)和能力。
3)mpp數(shù)據(jù)庫主要區(qū)別于smp數(shù)據(jù)庫。后者一般是單機架構(gòu),而單機能力畢竟有限,在OLAP計算數(shù)據(jù)量非常大的時候,單機數(shù)據(jù)庫的分析能力非常有限。mpp數(shù)據(jù)庫構(gòu)建一套分布式計算集群(mpp數(shù)據(jù)庫肯定是分布式系統(tǒng),但狹義上應(yīng)該不算那些只考慮數(shù)據(jù)切片的分布式數(shù)據(jù)庫),增強計算能力,在計算中再針對數(shù)據(jù)集做切片調(diào)度執(zhí)行等,最終希望能實現(xiàn)計算力的水平擴展。
總結(jié)一下,這些概念本身不是完全無關(guān)的,相互有關(guān)系。我接觸過的發(fā)展過程:
單機數(shù)據(jù)庫,到主備分布式數(shù)據(jù)庫(解決高可用和數(shù)據(jù)高可靠),到分庫分表(sharding解決橫向擴展)+主備分布式數(shù)據(jù)庫(解決部分數(shù)據(jù)的可用和數(shù)據(jù)可靠性,全局數(shù)據(jù)無強一致保障),再到主備+內(nèi)部自動分區(qū)和復(fù)雜分布式計算的分布式數(shù)據(jù)庫(數(shù)據(jù),語義,能力,免運維都很強),再到數(shù)據(jù)層共享存儲、計算層橫向彈性擴縮容的分布式數(shù)據(jù)庫架構(gòu)(能力越來越強,成本、彈性、故障恢復(fù)速度、災(zāi)備等),等等。
無論上單機還是分布式數(shù)據(jù)庫,針對單個sql,最終只會在一個節(jié)點上執(zhí)行完成,而mpp數(shù)據(jù)庫會對這個sql執(zhí)行計算任務(wù)分解,靠整個集群的算力分布式調(diào)度計算,最后整體完成sql。這個可能是與分布式數(shù)據(jù)庫的差異。但分布式數(shù)據(jù)庫與mpp數(shù)據(jù)庫不是一個差異化很大的概念,技術(shù)實現(xiàn)上也會有很多重疊的。
延伸閱讀:
二、全文索引
FULLTEXT(全文)索引,僅可用于MyISAM和InnoDB,針對較大的數(shù)據(jù),生成全文索引非常的消耗時間和空間。對于文本的大對象,或者較大的CHAR類型的數(shù)據(jù),如果使用普通索引,那么匹配文本前幾個字符還是可行的,但是想要匹配文本中間的幾個單詞,那么就要使用LIKE %word%來匹配,這樣需要很長的時間來處理,響應(yīng)時間會大大增加,這種情況,就可使用時FULLTEXT索引了,在生成FULLTEXT索引時,會為文本生成一份單詞的清單,在索引時及根據(jù)這個單詞的清單來索引。FULLTEXT可以在創(chuàng)建表的時候創(chuàng)建,也可以在需要的時候用ALTER或者CREATE INDEX來添加。