爲什麼要分庫分表, 那當然是由於數據量太大了導致數據庫訪問效率越來越低, 而且我們在設計服務器後臺數據庫的時候, 一定是會根據不同的業務類型, 把同類型業務的數據放到相關的數據庫以及表當中, 也就是分庫分表! 在數據量超大的時候, 比如幾億條數據量的時候, 使業務模塊和數據庫在交互的時候不至於失控(無效的查詢, 多餘的查詢, 效率低下)。
目錄
1 分庫
1.1 按照功能分庫
按照功能進行分庫。常見的分成6大庫:
- 用戶類庫:用於保存了用戶的相關信息。例如:db_user,db_system,db_company等。
- 業務類庫:用於保存主要業務的信息。比如主要業務是笑話,用這個庫保存笑話業務。例如:db_joke,db_temp_joke等。
- 內存類庫:主要用Mysql的內存引擎。前臺的數據從內存庫中查找,速度快。例如:heap。
- 圖片類庫:主要保存圖片的索引以及關聯。例如:db_img_index,db_img_res。
- 日誌類庫:記錄點擊,刷新,登錄等日誌信息。例如:db_log_click,db_log_fresh,db_log_login。
- 統計類庫:對業務的統計,比如點擊量,刷新量等等。例如db_stat。
1.2 安裝城市站分庫
如果業務遍佈全國,在按照功能分庫庫,每一個城市複製一份一模一樣的庫,只是庫後綴都是城市名稱。比如db_log_click_bj,db_log_click_tj,db_log_click_sh;
2 分表
2.1 水平分割:解決錶行數過大的問題
2.1.1 按照用戶或業務編號分表
對與用戶或業務可以按照編號%n,進行分成n表。例如笑話表:
tb_joke_01,tb_joke_02,tb_joke_03,tb_joke_04........
2.1.2 按照日期分表
對於日誌或統計類等的表。可以按照年,月,日,周分表。例如,點擊統計量:
tb_click_stat_201601,tb_click_stat_201602,tb_click_stat_201603
2.2 垂直分割
1)經常組合查詢的列放在一張表中。常用字段的表可以考慮用Memory引擎。
2)把不常用的字段單獨放在一張表。
3)把text,blob等大字段拆分出來放在附表中。
3 MySql數據庫常用框架
核心,一主多從,讀寫分離。