成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

uid 分庫,uname 究竟怎么查詢(五種方法)?

開發
uid能直接路由到庫,uname不能直接路由到庫,如果通過uname能查詢到uid,則問題解決。

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

當用戶中心單庫數據量越來越大時,怎么辦?

單庫存不下,水平切分,用多庫。

用什么業務屬性水平切分?

主鍵uid。

如何進行數據路由?

uid取模直接路由,例如:

如上圖所示,假設訪問uid=124的數據,取模后能夠直接路由db1。

那對于登錄名uname上的查詢怎么辦?

方案一:掃全庫法。

如上圖所示,假設訪問uname=shenjian的數據,由于不知道數據落在哪個庫上,往往需要遍歷所有庫。

其潛在不足是:當分庫數量多起來,性能會顯著降低。

還有沒有其他更加高效的方法呢?

常見的方案有以下幾種。

方案二:索引表法。

其設計思路是:uid能直接路由到庫,uname不能直接路由到庫,如果通過uname能查詢到uid,則問題解決。

其具體步驟是:

  • 建立一個索引表,記錄uname到uid的映射關系;
  • 用uname來訪問時,先通過索引表查詢到uid,再路由相應的庫;
  • 索引表屬性較少,可以容納非常多數據,一般不需要分庫;
  • 如果數據量過大,索引表可以通過uname來分庫;

其潛在不足是:增加了一次數據庫查詢。

方案三:緩存映射法。

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

其具體步驟是:

  • uname先到cache中查詢uid,再根據uid路由數據庫;
  • 假設cache miss,降級為掃全庫法獲取uname對應的uid,放入cache;
  • uname到uid的映射關系不會變化,映射關系一旦放入緩存,不會更改,無需淘汰,緩存命中率超高;
  • 如果數據量過大,cache可以通過uname水平切分;

其潛在不足是:增加了一次cache查詢。

方案四:uname生成uid。

其設計思路是:無需遠程查詢,本地計算由uname直接得到uid。

其具體步驟是:

  • 在用戶注冊時,設計單向函數uname生成uid,uid=f(uname),按uid分庫插入數據;
  • 用uname來訪問時,先通過單向函數計算出uid,即uid=f(uname),再由uid路由到對應庫;

如何設計單向函數,通過uname來生成uid?

最簡單的單向函數是MD5:

  • 如果uid是128bit的,uid=MD5(uname);
  • 如果uid是64bit的,uid=MD5(uname)/2;

畫外音,128bit折半的方法有很多,例如:取前一半,或者取后一半,或者前一半與后一半異或。

其潛在不足是:當用戶量非常巨大的時候,有uid沖突的風險,需要一個補丁機制,來解決沖突問題。

方案五:基因法。

其設計思路是:不用uname生成uid,從uname抽取“基因”,融入uid中。

什么是uname基因,如何將基因融入uid?

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

其具體步驟是:

  • 在用戶注冊時,設計單向函數uname生成3bit基因,uname_gene=f(uname),如上圖粉色部分;
  • 同時,使用ID生成器生成全局唯一uid的前61bit,如上圖綠色部分;
  • 把前61bit與后3bit基因組合,生成64bit的最終uid,并用最終uid水平切分數據;
  • 用uname來訪問時,先通過單向函數由uname再次復原3bit基因,uname_gene=f(uname),通過uname_gene%8直接路由到庫;

如何設計單向函數,通過uname來生成基因?

uname_gene=MD5(uname)再取最后3bit。

會不會導致數據分布不均勻?

不會,MD5具備完全隨機性。

其潛在不足是:

  • uid一旦生成就無法更改,需要提前規劃基因位數,例如:10年內最多分256庫,提前預留8bit基因位;
  • 登錄名不允許修改(該前提一般都滿足);
  • uid確定以后,登錄名以外的郵箱登陸,手機號登陸不能復用;

畫外音:郵箱登陸,手機號登陸可使用通用方案2與方案3。

稍作總結

使用uid分庫,uname查詢有五種方法:

  • 掃全庫法:遍歷所有庫;
  • 索引表法:數據庫中記錄uname到uid的映射關系;
  • 緩存映射法:緩存中記錄uname到uid的映射關系;
  • uname單向函數生成uid:小概率沖突;
  • 基因法:uname單向函數生成基因融入uid,需要提前規劃基因位數;

知其然,知其所以然。

思路比結論更重要。

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2021-06-04 10:56:32

分庫數據庫查詢

2017-04-17 07:00:54

uiduname數據庫

2022-01-10 06:52:59

查詢MySQL字段

2020-08-06 13:19:10

IBM多云管理

2020-12-03 14:40:10

云管理

2022-12-29 08:46:15

IT采購投資

2022-12-07 11:24:51

首席信息官IT

2011-03-15 14:16:27

2009-07-03 17:48:24

JSP頁面跳轉

2025-04-25 08:55:00

Pod運維

2011-04-21 10:08:34

2023-08-11 11:29:48

物聯網制造業

2021-11-02 07:54:40

List分片Java

2015-09-10 09:30:54

Java多線程同步

2020-04-02 10:45:48

多云云計算云平臺

2022-11-23 13:46:02

云支出云計算

2011-12-26 10:35:03

Windows系統Linux系統

2021-09-06 09:42:13

工業環境IIoT工業 4.0

2021-07-26 14:34:02

springboot 時間格式化項目

2023-08-17 12:37:35

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.99热.com| 久久www免费人成看片高清 | 亚洲a在线观看 | 欧美综合一区二区三区 | 亚洲区一区二 | 九九激情视频 | 久久久精彩视频 | 97影院在线午夜 | 欧美激情一区二区三区 | 特级黄一级播放 | 草久久免费视频 | 蜜桃视频在线观看免费视频网站www | 在线一级片 | 亚洲性视频 | 羞羞的视频免费观看 | 日日摸夜夜添夜夜添精品视频 | 久久国产精品偷 | 精品久久香蕉国产线看观看亚洲 | 北条麻妃一区二区三区在线观看 | 亚洲国产一区二区在线 | 一区不卡在线观看 | 久草视频在线播放 | 一区在线观看视频 | 亚洲在线一区 | 国产精品一区二区三 | 精品av| 中文字幕精品视频 | 男插女下体视频 | 亚洲热在线视频 | 国产精品1区 | 97成人免费 | 中国大陆高清aⅴ毛片 | 精品熟人一区二区三区四区 | 成人亚洲网 | 日本福利在线观看 | 亚洲国产欧美国产综合一区 | 色接久久 | 黑人精品xxx一区一二区 | 91在线网 | 国产精品一区二区在线播放 | 99在线免费视频 |