假如現在有張user表,資料量較大,到了需要分表的地步了。
根據使用者ID去分表處理,對10取餘存放。
但是現在有個疑慮,使用者登入時,總不能10張表都去查詢吧。
各位有什麼好的建議或思想,討論討論吧,互相學習,互相進步!!!
sorry沒描述清楚。
user表,id,name,password三個欄位
現在按id已經進行分表了,但是登陸時需要驗證name和password,這個時候怎麼去處理,不應該每張表都要查一遍吧
回複內容:
假如現在有張user表,資料量較大,到了需要分表的地步了。
根據使用者ID去分表處理,對10取餘存放。
但是現在有個疑慮,使用者登入時,總不能10張表都去查詢吧。
各位有什麼好的建議或思想,討論討論吧,互相學習,互相進步!!!
sorry沒描述清楚。
user表,id,name,password三個欄位
現在按id已經進行分表了,但是登陸時需要驗證name和password,這個時候怎麼去處理,不應該每張表都要查一遍吧
看看我的部落格吧
http://edagarli.logdown.com/posts/345292
沒必要直接操作DB,User有關資料放在緩衝即可,查詢快取。
可以根據使用者名稱進行hash啊
MySQL5.5以後可以選擇分區,按月份分區即可。
選擇分表的話,userid按10取餘分10個表單表還是有點大。userid按10取餘如果為1,那就去user_1中取即可,依次類推。
10個表不夠的話可以選擇分區,或者hash出N個表,N由自己的演算法確定。
個人認為按照ID取餘的劃分的話,不利於後續的資料庫的擴充,若10個不夠的時候,需要拓展到15個用戶端是要修改的,可以考慮使用hash的方式比較靠譜
追加:要不然可以在資料庫前加上redis .redis 記錄name和ID的對應關係,應該可以一定程度避免全域尋找的情況
使用者表最好垂直劃分,可以用memcache或者redis來緩衝使用者表,水平切分意義不大
用緩衝吧,因為使用者登入時,你根本不知道使用者ID
不明白你為什麼會對User表來分表。如果單純是舉個例子可能會誤導人。
我試過的分表一般就是按時間來分的。
如果非要用User分表,我的建議是取使用者名稱的拼音首字母,每個字母一個分表。如果嫌太多了就abc放一個表,def放一個表,查詢時候先取首字母,然後確定對應的分表。
如果使用者名稱是英文就簡單得多了。