今天咱們來學習MYSQL的分庫分表sql
分庫分表是爲了解決因爲數據量過大而致使數據庫性能下降的問題,將原來獨立的數據庫拆分紅若干數據庫組成,將數據大表拆分紅若干數據表組成,使得單一數據庫、單一數據表的數據量變小,從而達到提高數據性能的目的。 數據庫
案例:將商品信息表和商品描述表放在商品庫,店鋪表放在店鋪庫。bash
水平分庫: 因爲單庫數據量太大,按照必定規則分紅和庫中表字段的類型一致的不一樣庫中,每一個庫放在不一樣服務器上,減輕磁盤、cpu、內存的壓力。案例:將商品表分紅兩個字段類型同樣的商品表,分到兩個不一樣的服務器數據庫中。服務器
垂直分庫和水平分庫的區別:垂直分庫:把不一樣表分到不一樣的數據庫中(商品表和店鋪表)網絡
水平分庫:把不一樣數據分到不一樣數據庫中(商品表分紅兩個類型同樣的表分到不一樣數據庫中)框架
案例:將商品信息表按照訪問頻率分爲兩個表,商品信息和商品描述表 分佈式
水平分表: 在同一個數據庫內,把同一個表的數據按照業務屬性、時間、取鍵、Hash、數據量進行切分到多個表中。案例: 將同一個庫中的商品表的數據分紅兩個商品表中,能夠在一個或多個庫中函數
垂直分表和水平分表的區別:性能
垂直分表: 將一個表按照字段訪問的頻次分到多個表中,能夠是一個或多個數據庫(分的是字段) 水平分表: 將一個表按照數據分到多個表中,能夠是一個或多個數據庫(分的是數據)學習
數據庫代理方式訪問:
非代理方式訪問:SQL語句直接訪問數據庫服務器,比代理方式訪問快。
MYSQL Fabric官方產品對於分表仍是比較實用的。 水平分表的實現雖然難以實現,可是對於本身特定項目的分庫分表仍是比較好實現的,對於通用的分庫分表難以實現,下來就看怎麼實現吧!!!一、解析路由(找對應數據源、表):根據業務功能、SQL解析等方式,找到要訪問的數據源和表
二、執行相應表的功能(根據sql實現具體功能)
三、對查詢結果集進行合併,二次處理。(合併查詢結果集,執行子查詢)
四、是否有事務(處理不一樣方式的事務)
推薦使用DAO層實現方式
分庫分表能有效的緩解單機和單庫帶來的性能瓶頸和壓力,突破網絡IO、硬件資源、鏈接屬的瓶頸,同時也帶來了一些問題
一、事務一致性問題
分庫分表把數據分佈到不一樣的數據庫服務器,不可避免帶來分佈式事務問題
二、跨節點關聯查詢
原本能夠經過join鏈接查詢的sql語句,如今得兩次查詢
第一次:查到關聯數據的id。
第二次:根據id找到對應的數據。
三、跨節點分頁、排序函數
合二爲一
四、主鍵避重全局主鍵解決主鍵重複問題
五、公共表例如:地區表(商品表和店鋪表的依賴公共表)
在每一個數據庫服務中都創建公共表,全部對公共表的更新操做都同時發送到全部分庫執行。
小夥伴們,對於MYSQL數據庫的分庫分表理論就介紹到這裏了,下期咱們用sharding-JDBC框架來實現吧!!!
get到的小夥伴記得點贊👍+關注哦!小紅♥走起來!!!😘😘😘
複製代碼