淺談分表

在程序使用中,我們會(huì)發(fā)現(xiàn)有些業(yè)務(wù)表數(shù)據(jù)量越來越大,查詢效率越來越低,已經(jīng)到了必須考慮分表的時(shí)候。那么如何分表呢?以下是個(gè)人心得:

方案一、按照時(shí)間分表

? ? 按照時(shí)間分表很好理解,比如按照天、周、月、年作為分表依據(jù);優(yōu)點(diǎn)是分表規(guī)則簡單,缺點(diǎn)是數(shù)據(jù)查詢條件必須帶上時(shí)間參數(shù)。

方案二、按照userId分表

? ? web項(xiàng)目中,一般請求都能獲取token或session,間接可以獲取身份id(userId)。然后根據(jù)userId值設(shè)置自己的規(guī)則生成表,再建一個(gè)userId(主鍵)和tableName關(guān)聯(lián)的數(shù)據(jù)表。新產(chǎn)生的業(yè)務(wù)數(shù)據(jù)就存入對(duì)應(yīng)的表,同時(shí)把以前的業(yè)務(wù)表數(shù)據(jù)遷移過來。查詢業(yè)務(wù)數(shù)據(jù)時(shí)先根據(jù)當(dāng)前身份查找對(duì)應(yīng)的tableName,然后再查詢對(duì)應(yīng)表數(shù)據(jù)。

????如何根據(jù)userId值設(shè)置規(guī)則生成表,先附圖:

如果userId是整形,可取最后一位數(shù)或最后兩位數(shù)來分表,分表個(gè)數(shù)分別對(duì)應(yīng)10個(gè)和100個(gè),這里需要根據(jù)實(shí)際情況選擇。

? ? 如果userId是UUID字符串,先定義一個(gè)全局?jǐn)?shù)組[0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f],一共10+6=16個(gè)元素。①若取最后一個(gè)字符分表,可以分16個(gè)表;②若取最后兩位或首尾兩位分表,可分16*16=256個(gè)表,或者兩個(gè)字符對(duì)應(yīng)的數(shù)組索引相加,可分30個(gè)表。userId規(guī)則分表的優(yōu)點(diǎn)是不管后期規(guī)則是否變動(dòng),只要有身份和表名關(guān)聯(lián)都不影響。缺點(diǎn)是查詢所有人最近的業(yè)務(wù)數(shù)據(jù)比較麻煩,可以考慮建一個(gè)表,只存最近所有人的信息,并定期刪除很久以前的數(shù)據(jù)。

方案三、按照用戶組織分表

按照公司、部門、小組等信息分表,前提是確定個(gè)人所屬組織不會(huì)發(fā)生改變。優(yōu)點(diǎn)和缺點(diǎn)和方案二基本相同。

所有思路僅供參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容