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