mysql - 分庫(kù)分表、分區(qū)、讀寫(xiě)分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來(lái)哪些效率或者其他方面的好處
問(wèn)題描述
問(wèn)題解答
回答1:用處 / 功能讀寫(xiě)分離:提高數(shù)據(jù)庫(kù)的讀性能。分庫(kù)、垂直分表:分散系統(tǒng)負(fù)載,讓原來(lái)一臺(tái)機(jī)器做的事,變成幾臺(tái)機(jī)器來(lái)做。水平分表、分區(qū):縮小索引大小,使查找更快。
使用場(chǎng)景讀寫(xiě)分離:打開(kāi)一個(gè)帖子內(nèi)容頁(yè),需要select帖子表,和帖子評(píng)論表,每個(gè)耗時(shí)10ms的話(huà)。每秒1000次查詢(xún)就是這個(gè)數(shù)據(jù)庫(kù)的極限了。也就是說(shuō),這個(gè)論壇只能承載每秒500次訪問(wèn)。那么我們就可以對(duì)這個(gè)數(shù)據(jù)庫(kù)做讀寫(xiě)分離,來(lái)成倍提高數(shù)據(jù)庫(kù)的讀性能。
水平分表:交易歷史,這種表。因?yàn)楹苌俨樵?xún)1年前的信息。所以,我們可以按年份來(lái)進(jìn)行水平分表。將今年的表優(yōu)先對(duì)待。就減少了要查詢(xún)的表的大小。
分庫(kù):如果我們的系統(tǒng)非常大了,功能非常多,就會(huì)有很多類(lèi)型的數(shù)據(jù)庫(kù)表,例如營(yíng)銷(xiāo)活動(dòng)的表,和用戶(hù)賬號(hào)的表是沒(méi)有關(guān)聯(lián)的,那么我們就可以將他們分到兩個(gè)數(shù)據(jù)庫(kù)中,然后放到不同的獨(dú)立的數(shù)據(jù)庫(kù)服務(wù)器,就能使數(shù)據(jù)庫(kù)吞吐量成倍增加。
垂直分表:典型的應(yīng)用場(chǎng)景是在文章列表這樣的場(chǎng)景,一般來(lái)講,我們的文章表會(huì)有title、userId、Content等字段,其中的Content字段一般是Text或者LongText類(lèi)型,而其它的字段都是固定長(zhǎng)度的數(shù)據(jù)類(lèi)型。我們知道一個(gè)數(shù)據(jù)庫(kù)優(yōu)化規(guī)則是:
如果一個(gè)表的所有字段都是固定長(zhǎng)度類(lèi)型的,那么它就是定長(zhǎng)表,定長(zhǎng)表比動(dòng)態(tài)長(zhǎng)度表查詢(xún)性能要高
那么,我們就可以使用垂直分表來(lái)將文章表分成文章表和文章內(nèi)容表。于是文章列表頁(yè)面所需的查詢(xún),就只需要查詢(xún)一張定長(zhǎng)表了。
未完待續(xù)
回答2:數(shù)據(jù)庫(kù)的表的記錄在超過(guò)一定數(shù)量后性能下降嚴(yán)重,因此要維持單表數(shù)據(jù)量不過(guò)高,分表。
數(shù)據(jù)庫(kù)程序是通過(guò)大量IO存取數(shù)據(jù),為了使用多臺(tái)廉價(jià)機(jī)器同時(shí)服務(wù)以提高性能而不用購(gòu)買(mǎi)單臺(tái)超級(jí)機(jī)器,分庫(kù)。
同樣是因?yàn)镮O,一般讀比寫(xiě)數(shù)量多,單獨(dú)提供讀減輕寫(xiě)的壓力,還提供了一定的冗余抗災(zāi)能力。
