數(shù)據(jù)庫(kù)有哪幾種 當(dāng)數(shù)據(jù)庫(kù)扼住系統(tǒng)性能咽喉,直接分庫(kù)分表能解決嗎?
當(dāng)數(shù)據(jù)庫(kù)扼住系統(tǒng)性能咽喉,直接分庫(kù)分表能解決嗎?子庫(kù)和子表是一種相對(duì)落后的優(yōu)化方法,因?yàn)槌杀鞠鄬?duì)較高。遇到數(shù)據(jù)庫(kù)瓶頸:-首先考慮SQL優(yōu)化,這是最簡(jiǎn)單的方法。對(duì)現(xiàn)有系統(tǒng)沒(méi)有影響。-第二個(gè)是考慮數(shù)據(jù)庫(kù)讀
當(dāng)數(shù)據(jù)庫(kù)扼住系統(tǒng)性能咽喉,直接分庫(kù)分表能解決嗎?
子庫(kù)和子表是一種相對(duì)落后的優(yōu)化方法,因?yàn)槌杀鞠鄬?duì)較高。
遇到數(shù)據(jù)庫(kù)瓶頸:
-首先考慮SQL優(yōu)化,這是最簡(jiǎn)單的方法。對(duì)現(xiàn)有系統(tǒng)沒(méi)有影響。
-第二個(gè)是考慮數(shù)據(jù)庫(kù)讀寫(xiě)分離,這也是一個(gè)相對(duì)簡(jiǎn)單的方法。在數(shù)據(jù)庫(kù)級(jí)配置中,系統(tǒng)級(jí)只需要調(diào)整獲取數(shù)據(jù)庫(kù)連接的邏輯即可。讀取數(shù)據(jù)時(shí),可以同時(shí)獲得主庫(kù)和從庫(kù)連接。寫(xiě)入數(shù)據(jù)時(shí),僅獲取主庫(kù)連接。
-考慮添加緩存層。數(shù)據(jù)緩存在緩存中,再次訪問(wèn)時(shí)不再?gòu)臄?shù)據(jù)庫(kù)檢索。通常,緩存層對(duì)系統(tǒng)是透明的,對(duì)系統(tǒng)本身沒(méi)有影響。但是,cache的引入也引入了相應(yīng)的需要考慮的問(wèn)題,如雪崩、命中率、分布式cache等]-還有一種非技術(shù)手段,就是改變需求。性能問(wèn)題的原因是否不合理?還是要求太復(fù)雜?需求可以簡(jiǎn)化嗎?這種方法對(duì)系統(tǒng)的影響相對(duì)較小。
-最后,考慮子數(shù)據(jù)庫(kù)和子表。優(yōu)先考慮子數(shù)據(jù)庫(kù),因?yàn)樗茸颖砗?jiǎn)單。將相應(yīng)的表移動(dòng)到新的數(shù)據(jù)庫(kù)中,并調(diào)整系統(tǒng)的邏輯以獲得數(shù)據(jù)庫(kù)連接。在這里,我們需要考慮移動(dòng)哪些表。在提高性能的前提下,我們首先嘗試避免分布式事務(wù)。
-最后,考慮子表。子表的主要原因是單個(gè)表中的數(shù)據(jù)量很大。子表分為縱斷面和橫斷面。垂直剪切是按列剪切的,例如用戶表。常用信息為基本信息表,其他信息為明細(xì)表。橫切是按行切割。例如,一個(gè)有1億數(shù)據(jù)的表被分成10個(gè)有1000萬(wàn)數(shù)據(jù)的表。這涉及到數(shù)據(jù)應(yīng)該存儲(chǔ)在哪個(gè)表中或從哪個(gè)表中獲取。在表被劃分之后,可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行進(jìn)一步的優(yōu)化。
-如果涉及分布式事務(wù),應(yīng)考慮如何保證分布式事務(wù)。理論上,2個(gè),3個(gè),帕克斯,帽子,底座。相應(yīng)中間件的使用。
系統(tǒng)的設(shè)計(jì)和優(yōu)化不是模仿的問(wèn)題,而是需要根據(jù)實(shí)際場(chǎng)景進(jìn)行處理。
數(shù)據(jù)庫(kù)水平分庫(kù)和垂直分庫(kù)有什么區(qū)別?
劃分?jǐn)?shù)據(jù)庫(kù)的常用方法是水平和垂直。一般來(lái)說(shuō),數(shù)據(jù)庫(kù)是根據(jù)用戶屬性(城市或ID的哈希)劃分的,或者根據(jù)業(yè)務(wù)功能塊劃分的。橫向數(shù)據(jù)庫(kù)拆分方法主要是根據(jù)用戶屬性(如城市)對(duì)物理數(shù)據(jù)庫(kù)進(jìn)行拆分。一種常見(jiàn)的方法是把全省劃分為三個(gè)地區(qū)。垂直子庫(kù)模式:根據(jù)業(yè)務(wù)維度和數(shù)據(jù)訪問(wèn)權(quán)限,將數(shù)據(jù)分為多個(gè)數(shù)據(jù)庫(kù)。例如,一些公共配置信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,以便單獨(dú)維護(hù)。