1.應用場景:
使用mysql數據庫做查詢,當數據量超過200w時,查詢數度受到限制,此時爲了避開這一瓶頸,我們採取分庫分表的數據庫設計思想,將數據按照一定規律保存至數據庫,常用的方式如下:
1.1使用時間作爲依據分庫/分表
例如,我們可以將數據按照月份保存在表中,例如:translate_2015_01,translate_2015_02.......以此達到分表、分庫的目的;
1.2 使用數字作爲分庫,分表標準(取餘)
我們經常會定義某個字段爲自增長或者某個隨機數,或者某個特定編碼,利用這個編碼,我們將其存放到不同的表中,例如,我們想要定義30張表存我們獲得的數據, 第一個值爲1,我們用1%30=1,由此可知該數據放在第一張表,又例如500%30=20,該數據放入第20張表。
1.3使用md5區分(上傳文件等)
在上傳文件過程中,將文件名的md5值取前3位作爲上傳文件保存的文件夾名稱,這樣便將上傳的文件保存在了3^3=27個文件夾中,方便下次尋找到該文件;
2.使用分表,分庫不利方面:
不利於做數據的統計操作,需要跨表跨庫;增加設計的複雜度;
參考文檔鏈接:
Ibatis和Hibernate 數據庫分表(動態表名映射)的實現方法:http://www.blogjava.net/weishuangshuang/archive/2011/03/26/347080.html
分庫分表的解決方案:http://fengbin2005.iteye.com/blog/1165038
數據庫水平切分的實現原理解析---分庫,分表,主從,集羣,負載均衡器:http://zhengdl126.iteye.com/blog/419850
Spring + iBatis 的多庫橫向切分簡易解決思路:http://www.iteye.com/topic/781317
SQL SERVER分區表方案 :http://terryli.blog.51cto.com/704315/163315