分片欄位userId 用手機號查詢

2021-10-01 16:47:49 字數 1292 閱讀 9482

選取好分片字段,資料庫分片就完成了一大半

面對使用者維度(2c)的業務我們最常用的分片字段就是user_id,但登入基本都拿手機號(沒見過拿user_id的)這樣的場景怎麼實現呢?

下面我們提供三種實現方案:

在資料庫新建表,表只有兩列,維護手機號-user_id的對映

同時將對映表資料維護到快取;操作順序如下

使用者註冊時拿手機號查詢快取,如果不存在直接走註冊流程

註冊成功後同時維護快取(不設定失效時間)和對映表

手機號查詢時,先查詢快取得到user_id,然後拿user_id查詢

缺點每次多查詢一次快取

快取不可用時需要查詢一次資料庫

對映表維護全量資料,如果資料量達到一定程度也要考慮分庫分表的情況(複雜度高)

優點:實現簡單

例如:我們訂單查詢,按不同使用者角色拿使用者id(user_id)和商戶id(merchant_id)分別查詢

實現思路:

每個庫新建兩張字段一模一樣的表,用來冗餘所有字段,表中包含兩個分片字段(如下圖)

新增資料時以其中乙個分片字段為準新增其中乙個表

讀取新增資料的binlog,再按照其它分片字段逐一新增其它庫表

表1分片字段:user_id

表2分片字段:merchant_id

首先看資料流程:

新增資料時以user_id為分片鍵選擇庫,新增成功後記錄binlog

利用阿里canal監聽binlog再按照merchant_id分片鍵重新選擇庫,新增資料

執行完1-2步驟之後,至少有兩個表內有了資料(可能在不同庫,也可能在同乙個庫)

優點:查詢只需要按不同分片字段查詢一次即可

缺點:一條新增需要維護兩個表,冗餘一條資料,占用空間

**複雜度高,需要引入binlog監聽中介軟體(當然也可以新增成功後發mq)

分片規則、演算法要求高,多分片鍵時通過分片演算法,分的庫個數要相同,不相同的話需要維護兩套庫更複雜

這裡主要參考snowflak演算法,將字段值賦予一定的業務意義,反編譯後得到分片因子

比如:分庫演算法:每年乙個庫;使用者id按snowflake 演算法生成;反編譯user_id後得到時間從而選擇庫

再粗暴點:拿user_id能解析出merchant_id,拿merchant_id做分片鍵

題外話:具體用那種還要結合具體的分片規則,架構設計等綜合考慮,這裡只是給出大概思路,一般的系統1就能滿足,3對於登入這樣的場景不太好弄,2實現相對複雜,但使用起來效果最好

userId分庫,怎麼通過其他字段查詢

使用者中心是幾乎每乙個公司必備的基礎服務,使用者註冊 登入 資訊查詢與修改都離不開使用者中心。當資料量越來越大時,需要多使用者中心進行水平切分。最常見的水平切分方式,按照userid取模分庫 例如 通過userid取模,將資料分布到多個資料庫例項上去,提高服務例項個數,降低單庫資料量,以達到擴容的目...

呼叫手機震動

1,在androidmanifest.xml中加入如下,取得許可權 2,private vibrator vibrator if float.parsefloat pricevalues cost off on off on.vibrator.vibrate pattern,1 1不重複,非 1為從...

用手機控制樹莓派

手中沒有樹莓派的螢幕 顯示器,這時候可以用手機作為樹莓派的螢幕來使用。在看下面的內容之前你需要知道怎樣在電腦上通過網路控制樹莓派。1.臨時通過其他的螢幕設定一下樹莓派 wifi和手機連到乙個網路下 vnc ssh這兩項都設定成enable 2.登入ssh 可以使用兩種方法登入ssh,選擇哪一種都可以...