用戶(hù)中心是每一個(gè)公司必備的基礎(chǔ)服務(wù),用戶(hù)的注冊(cè)串塑,登錄沼琉,信息查詢(xún)都離不開(kāi)用戶(hù)中心。當(dāng)數(shù)據(jù)量越來(lái)越大的時(shí)候桩匪,需要多用戶(hù)進(jìn)行水平切分打瘪。最常見(jiàn)的水平切分方式,按照uid取膜分庫(kù)傻昙,通過(guò)取膜將數(shù)據(jù)分布到多個(gè)數(shù)據(jù)庫(kù)實(shí)例瑟慈,提高服務(wù)實(shí)例個(gè)數(shù),已達(dá)到擴(kuò)容的目的屋匕。
如果按照uid查詢(xún)可以直接路由到庫(kù)葛碧。如圖水平切分之后:
假如 uid=121,取膜之后直接定位到db1
如果是uname查詢(xún),假設(shè)uname=hello过吻,就沒(méi)有辦法定位到庫(kù)了进泼。
如果想要高效的查詢(xún)蔗衡,今天主要討論兩種方案。
1.【索引表方法】
思路:uid可以直接定位到庫(kù)乳绕,uname不能直接定位到庫(kù)绞惦,如果能通過(guò)uname 定位到 uid那么為問(wèn)題解決。下面來(lái)說(shuō)下怎么通過(guò)uid定位到uname
解決方案:
1)建立一個(gè)索引記錄表洋措,映射關(guān)系uname 對(duì)應(yīng) uid济蝉。并且建立索引
2)當(dāng)用uname查詢(xún)時(shí),先通過(guò)uname查詢(xún)到uid菠发,在定位到庫(kù)
3)索引表數(shù)據(jù)屬性少王滤,可以容納很多數(shù)據(jù),一般不需要分庫(kù)
4)如果數(shù)據(jù)量過(guò)大可以按uname分庫(kù)
缺點(diǎn):多一次數(shù)據(jù)庫(kù)的查詢(xún)滓鸠,性能下降一半
2【緩存映射方法】
思路:訪(fǎng)問(wèn)索引表性能低雁乡,把映射關(guān)系放到緩存中
解決方案:
1)通過(guò)uname先查到緩存與uname的對(duì)應(yīng)關(guān)系uid
- uname和uid關(guān)系不會(huì)變化,因?yàn)閡name和uid都是唯一的
缺點(diǎn):多一次緩存查詢(xún)
以上是在分庫(kù)分表中遇到的問(wèn)題以及解決方案糜俗,個(gè)人認(rèn)為第二中方案比較好踱稍。