用uid分庫,uname上的查詢怎么辦?

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

【緣起】

用戶中心是幾乎每一個公司必備的基礎服務,用戶注冊、登錄、信息查詢與修改都離不開用戶中心。

?

當數據量越來越大時,需要多用戶中心進行水平切分。最常見的水平切分方式,按照uid取模分庫:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

通過uid取模,將數據分布到多個數據庫實例上去,提高服務實例個數,降低單庫數據量,以達到擴容的目的。

?

水平切分之后:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

uid屬性上的查詢可以直接路由到庫,如上圖,假設訪問uid=124的數據,取模后能夠直接定位db-user1。

?

對于uname上的查詢,就不能這么幸運了:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

uname上的查詢,如上圖,假設訪問uname=shenjian的數據,由于不知道數據落在哪個庫上,往往需要遍歷所有庫【掃全庫法】,當分庫數量多起來,性能會顯著降低。

?

用uid分庫,如何高效實現上的查詢,是本文將要討論的問題。

?

【索引表法】

思路:uid能直接定位到庫,uname不能直接定位到庫,如果通過uname能查詢到uid,問題解決

解決方案

1)建立一個索引表記錄uname->uid的映射關系

2)用uname來訪問時,先通過索引表查詢到uid,再定位相應的庫

3)索引表屬性較少,可以容納非常多數據,一般不需要分庫

4)如果數據量過大,可以通過uname來分庫

潛在不足:多一次數據庫查詢,性能下降一倍

?

【緩存映射法】

思路:訪問索引表性能較低,把映射關系放在緩存里性能更佳

解決方案

1)uname查詢先到cache中查詢uid,再根據uid定位數據庫

2)假設cache miss,采用掃全庫法獲取uname對應的uid,放入cache

3)uname到uid的映射關系不會變化,映射關系一旦放入緩存,不會更改,無需淘汰,緩存命中率超高

4)如果數據量過大,可以通過name進行cache水平切分

潛在不足:多一次cache查詢

?

uname生成uid

思路:不進行遠程查詢,由uname直接得到uid

解決方案

1)在用戶注冊時,設計函數uname生成uid,uid=f(uname),按uid分庫插入數據

2)用uname來訪問時,先通過函數計算出uid,即uid=f(uname)再來一遍,由uid路由到對應庫

潛在不足:該函數設計需要非常講究技巧,有uid生成沖突風險

?

uname基因融入uid

思路:不能用uname生成uid,可以從uname抽取“基因”,融入uid中

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

假設分8庫,采用uid%8路由,潛臺詞是,uid的最后3個bit決定這條數據落在哪個庫上,這3個bit就是所謂的“基因”。

?

解決方案

1)在用戶注冊時,設計函數uname生成3bit基因,uname_gene=f(uname),如上圖粉色部分

2)同時,生成61bit的全局唯一id,作為用戶的標識,如上圖綠色部分

3)接著把3bit的uname_gene也作為uid的一部分,如上圖屎黃色部分

4)生成64bit的uid,由id和uname_gene拼裝而成,并按照uid分庫插入數據

5)用uname來訪問時,先通過函數由uname再次復原3bit基因,uname_gene=f(uname),通過uname_gene%8直接定位到庫

?

【總結】

業務場景:用戶中心,數據量大,通過uid分庫后,通過uname路由不到庫

?

解決方案

1)掃全庫法:遍歷所有庫

2)索引表法:數據庫中記錄uname->uid的映射關系

3)緩存映射法:緩存中記錄uname->uid的映射關系

4)uname生成uid

5)uname基因融入uid

轉載于:https://my.oschina.net/architectliuyuanyuan/blog/1590330

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278834.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 新聞摘要_每日新聞摘要:運營商承諾他們不再出售您的位置…

python 新聞摘要Last year it was discovered that Verizon, Sprint, AT&T, and T-Mobile were all selling your real-time location data to third-party companies. They offered no oversight of what the companies did with the data whatsoever, and if that’s not…

Jquery中的this是什么類型

var city $("#city"); //這個city是dom還是jq if(city instanceof jQuery) alert(11); else alert(this.tagName); 總結: 1 如果是一個節點的某個事件…

計算機復試比重低的學校,又有985院校發布調劑信息,這個34所降低復試比重!...

原標題:又有985院校發布調劑信息,這個34所降低復試比重!01985院校調劑01.清華大學昨天,清華大學發布一則調劑信息:臨床醫學交叉人才培養項目接受調劑。接收調劑專業如下:據其官網介紹,該項目為推…

Silverlight 解謎游戲 之四 粒子特效

前幾篇一直在Blend中工作沒體現出開發者的作用,本篇將為訂書器(Stapler)添加自定義粒子效果,當訂書器被點擊時產生更好的視覺效果。其中將使用到nerdplusart 的Silverlight Particle Generator 粒子特效工具。 在結束本章內容后&a…

CS229 1 .線性回歸與特征歸一化(feature scaling)

線性回歸是一種回歸分析技術,回歸分析本質上就是一個函數估計的問題(函數估計包括參數估計和非參數估計),就是找出因變量和自變量之間的因果關系。回歸分析的因變量是應該是連續變量,若因變量為離散變量,則…

注冊表被黑客篡改 怎樣修復_使用快速注冊表黑客設置Office 2007配色方案

注冊表被黑客篡改 怎樣修復We’ve written previously about how to set the Office 2007 color scheme away from that awful default blue, but you can also set it with a quick registry hack or even via group policy on your network, so we’ll cover that here. 前面…

共享計算機后無法訪問磁盤,win10電腦共享硬盤無法訪問如何解決

很多用戶為了方便文件的傳輸和訪問,就會在局域網中開啟硬盤共享,正常是可以通過網絡打開訪問該用戶計算機的磁盤從而讀取數據文件,可是有win10系統用戶卻發現共享硬盤無法訪問,武大直接通過網絡打開對方的磁盤,該如何處…

mikadonic-iptables學習筆記

firewall圖像化配置[rootdesktop0 ~]# firewall-config iptabes -Fiptabes -Xiptabes -Z先設置默認規則(最后防線)[rootdesktop0 ~]# iptables -P INPUT DROP&&iptables -P OUTPUT DROP&&iptables -P FORWARD DROP iptables -A&#xf…

如何組合救援磁盤以創建最終Windows修復磁盤

We’ve covered loads of different anti-virus, Linux, and other boot disks that help you repair or recover your system, but why limit yourself to just one? Here’s how to combine your favorite repair disks together to create the ultimate repair toolkit for…

WebService C#開發/調用

簡單描述C#開發WebService操作步驟以及調用方式 WebService開發 第一步:創建Web空項目 第二步:為創建的Web空項目添加Web服務 第三步:實現WebService方法(僅供參考) 運行WebService測試 第一步:運行WebService程序,略 …

南京鐵道學院計算機應用,南京鐵道職業技術學院交通運營管理專業怎么樣

開設課程:大學英語、高等數學、計算機應用、交通運輸學、國際貿易政策與實務、班輪租船業務、運籌學、城市軌道運營管理、交通運輸規劃原理、交通運輸信息技術、運輸市場營銷學、鐵路貨運組織管理、航空運輸業務、集裝箱運輸管理、港航商務管理、交通運輸專業英語、…

C語言第九次博客作業--指針

一、PTA實驗作業 題目1:兩個4位正整數的后兩位互換 1. 本題PTA提交列表 2. 設計思路 定義循環變量i,兩個數組a[4],b[4] for i0 to 3a[i]*p取各個位*p/10 end for i0 to 3b[i]*q取各個位*q/10 end 分別對*p和*q重新賦值 3.代碼截圖 4.本題調試過程碰到問題及PTA提交列…

使用CEOP增強的Internet Explorer 8幫助保護您的孩子

Do you want to make Internet Explorer safer and more helpful for you and family? Then join us as we look at the CEOP (Child Exploitation and Online Protection Centre) enhanced version of Internet Explorer 8. 您想使Internet Explorer對您和家人更安全&#xf…

如何保持進步

文章:今日頭條 CEO 張一鳴:面試了 2000 個年輕人,混得好的都有這 5 種特質轉載于:https://www.cnblogs.com/Tpf386/p/10033670.html

MAC--PPTP教程

第一步點擊DocK-系統設置 第二步點擊網絡,進入網絡設置 第三步點擊號-創建新服務,創建新的網絡連接 第四步接口-選-類型-選-PPTP服務名稱-選-然后點擊-創建 第五步進入設置頁面-服務器地址點擊查看虛擬IP列表賬戶名稱-輸入試用帳號或是你已充值開通的帳號…

2015計算機應用基礎平時作業答案,2015秋《計算機應用基礎》第一次作業

2015秋《計算機應用基礎》第一次作業 一、單項選擇題。本大題共50個小題,每小題 2.0 分,共100.0分。在每小題給出的選項中,只有一項是符合題目要求的。 1. 第一臺電子計算機是1946年在美國研制成功的,該機的英文縮寫名是______。 …

頁面置換算法及例題

一、頁面置換算法 不適當的算法可能會導致進程發生“抖動”:即剛被換出的頁很快又要被訪問,需要將他重新調入,此時又需要再選一頁調出。而此剛被調出的頁面很快又被訪問,又需將它調入,如此頻繁地更換頁面,以…

vista磁盤使用100%_如何在Windows 7或Vista中創建和使用密碼重置磁盤

vista磁盤使用100%Forgetting your password can be an extremely frustrating situation, and we’ve already shared how to reset your password with the Ultimate Boot CD as well as the System Rescue CD, but you can prevent the situation entirely by creating a pa…

Nginx服務狀態的監控

一、安裝Nginx 使用源碼編譯安裝,包括具體的編譯參數信息。 正式開始前,編譯環境gcc g 開發庫之類的需要提前裝好。 安裝make: yum -y install gcc automake autoconf libtool make 安裝g: yum install gcc gcc-c 一般我們都需要先裝pcre, zl…

計算機二級高級應用這么難,計算機二級考試越來越難的實錘!真實數據告訴你到底難在哪里?...

今年3月考試成績暫時未公布(預計在5月中旬發布),通過率暫時無法得知。但是根據考后后臺反饋情況,今年通過率可能再創新低。不管你是不是有感知,計算機二級通過率的確在逐年降低。近3年難度越來越大每次考試結束后后臺評論最多的就是“今年的考…