賬號表 超kw條 用mysql 怎么快速存儲快速查詢 而且上限多少個未知比如 類似淘寶 或者 網(wǎng)易的賬號。
擁有18年軟件開發(fā)和IT教學經(jīng)驗。曾任多家上市公司技術總監(jiān)、架構(gòu)師、項目經(jīng)理、高級軟件工程師等職務。 網(wǎng)絡人氣名人講師,...
正好做過兩個千萬級的賬號系統(tǒng),簡單說一下。
首先其實千萬真的不算大,而且賬號系統(tǒng)這種查詢相對簡單,無非有幾種查詢,按userid,按email,按phonenumber等等。如果你要在這張表上再做什么地區(qū)、年齡的條件查詢,那當然是不太靠譜,誰干誰悲劇。
既然都是主鍵查詢,或者簡單索引查詢,那就算放一張表也不是無法承受的。順便做個主從讀寫分離減壓又備份。
如果,你的字段多到離譜那可以考慮一下縱向拆分,比如常用字段在一個表,非常用字段一個表。
當然,數(shù)據(jù)再多你可以考慮直接按主鍵做橫向分庫分表,最簡單方便的就是userid取模了。只是在做批量userid查詢多個用戶信息的時候可能要費事點,當然,我相信你肯定會做一個userid對應用戶信息的緩存了吧。一級或者兩級緩存,保證活躍的用戶信息都能在里面,基本也夠了。
上面是針對你只有一個用戶表的情況,實際上,一般的用戶表可能有兩個功用:一是用戶登陸注冊,二是用戶信息查詢管理。
這兩個功能其實可以分開來做,登陸注冊相關操作在一套表,用戶信息管理在另一套表,這里面可能要做一些數(shù)據(jù)冗余。比如你的郵箱字段可能在兩個表里都有,更新記得要同步。
百度了一下,http://www.cnblogs.com/luxf/archive/2012/02/08/2343345.html
千萬條必須分表分庫,甚至要動用集群運算。
分庫的最*煩在于方法選不好容易不均衡。以英文為例,如果簡單的按首字母分配,那么Q、X、Z等就會異常的少,E、I等就會特別的多。你需要一個均衡的分配方法。做HASH取首個16進制數(shù)是個不錯的主意。
更多的細節(jié),都需要看你的具體需求而定,只言片語的問題是無法回答的。
kw級別,其實不需要分表分庫,但是,鑒于你需要多個字段查詢,如果索引建的太多,維護索引的成本就會過高。
但是,因為你要用多個字段作為查詢條件,那么也不方便使用分表分庫的方法。假如你使用userid根據(jù)一定規(guī)則分表的話,那么,用userid查詢的時候,你可以找到要從哪個表里面查詢,但是,用其他字段查詢的時候怎么辦?總不能每個表都查一遍吧。
所以最好的方法還是減少查詢條件,控制在4,5個之內(nèi),這樣維護索引的成本應該也還好,特別是數(shù)據(jù)不需要頻繁更新的時候。
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號