帶您了解什么是Mysql分表
Mysql分表技術(shù)是Mysql數(shù)據(jù)庫(kù)中的關(guān)鍵技術(shù),下文對(duì)Mysql分表的概念及使用作了詳細(xì)的介紹,如果您對(duì)此感興趣的話,不妨一看。
首先我們需要了解為什么要進(jìn)行Mysql分表,Mysql分表的好處是什么。我們先來(lái)大概了解以下一個(gè)數(shù)據(jù)庫(kù)執(zhí)行SQL的過(guò)程:
接收到SQL --> 放入SQL執(zhí)行隊(duì)列 --> 使用分析器分解SQL --> 按照分析結(jié)果進(jìn)行數(shù)據(jù)的提取或者修改 --> 返回處理結(jié)果
當(dāng)然,這個(gè)流程圖不一定正確,這只是我自己主觀意識(shí)上這么我認(rèn)為。那么這個(gè)處理過(guò)程當(dāng)中,最容易出現(xiàn)問(wèn)題的是什么?就是說(shuō),如果前一個(gè)SQL沒(méi)有執(zhí)行完畢的話,后面的SQL是不會(huì)執(zhí)行的,因?yàn)闉榱吮WC數(shù)據(jù)的完整性,必須對(duì)數(shù)據(jù)表文件進(jìn)行鎖定,包括共享鎖和獨(dú)享鎖兩種鎖定。共享鎖是在鎖定的期間,其它線程也可以訪問(wèn)這個(gè)數(shù)據(jù)文件,但是不允許修改操作,相應(yīng)的,獨(dú)享鎖就是整個(gè)文件就是歸一個(gè)線程所有,其它線程無(wú)法訪問(wèn)這個(gè)數(shù)據(jù)文件。一般MySQL中最快的存儲(chǔ)引擎MyISAM,它是基于表鎖定的,就是說(shuō)如果一鎖定的話,那么整個(gè)數(shù)據(jù)文件外部都無(wú)法訪問(wèn),必須等前一個(gè)操作完成后,才能接收下一個(gè)操作,那么在這個(gè)前一個(gè)操作沒(méi)有執(zhí)行完成,后一個(gè)操作等待在隊(duì)列里無(wú)法執(zhí)行的情況叫做阻塞,一般我們通俗意義上叫做“鎖表”。
鎖表直接導(dǎo)致的后果是什么?就是大量的SQL無(wú)法立即執(zhí)行,必須等隊(duì)列前面的SQL全部執(zhí)行完畢才能繼續(xù)執(zhí)行。這個(gè)無(wú)法執(zhí)行的SQL就會(huì)導(dǎo)致沒(méi)有結(jié)果,或者延遲嚴(yán)重,影響用戶體驗(yàn)。
特別是對(duì)于一些使用比較頻繁的表,比如SNS系統(tǒng)中的用戶信息表、論壇系統(tǒng)中的帖子表等等,都是訪問(wèn)量大很大的表,為了保證數(shù)據(jù)的快速提取返回給用戶,必須使用一些處理方式來(lái)解決這個(gè)問(wèn)題,這個(gè)就是我今天要聊到的分表技術(shù)。
Mysql分表技術(shù)顧名思義,就是把若干個(gè)存儲(chǔ)相同類型數(shù)據(jù)的表分成幾個(gè)表分表存儲(chǔ),在提取數(shù)據(jù)的時(shí)候,不同的用戶訪問(wèn)不同的表,互不沖突,減少鎖表的幾率。比如,目前保存用戶分表有兩個(gè)表,一個(gè)是user_1表,還有一個(gè)是 user_2 表,兩個(gè)表保存了不同的用戶信息,user_1 保存了前10萬(wàn)的用戶信息,user_2保存了后10萬(wàn)名用戶的信息,現(xiàn)在如果同時(shí)查詢用戶 heiyeluren1 和 heiyeluren2 這個(gè)兩個(gè)用戶,那么就是Mysql分表從不同的表提取出來(lái),減少鎖表的可能。
【編輯推薦】