分庫:
分庫是啥意思?就是你一個庫一般我們經驗而言,最多支撐到並發 2000,一定要擴容了,而且一個健康的單庫並發值你最好保持在每秒 1000 左右,不要太大。那么你可以將一個庫的數據拆分到多個庫中,訪問的時候就訪問一個庫好了。
分表:
分表是啥意思?就是把一個表的數據放到多個表中,然后查詢的時候你就查一個表。比如按照用戶 id 來分表,將一個用戶的數據就放在一個表中。然后操作的時候你對一個用戶就操作那個表就好了。這樣可以控制每個表的數據量在可控的范圍內,比如每個表就固定在 200 萬以內。
了解哪些分庫分表中間件?
cobar, TDDL ,mycat。
如何對數據庫如何進行垂直拆分或水平拆分的?
水平拆分:
水平分割是企業最常用到的,水平拆分就是大表按照記錄分為很多子表。
水平分的規則完全是自定義的,有以下幾種參考設計:1.根據業務可以按照天、月、年來進行拆分;2.按每個表的固定記錄數
垂直拆分:
將一個表按照字段來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。
優勢:比沒有分表來說,提高了查詢速度,降低了查詢結果所用內存;
劣勢:沒有解決大量記錄的問題,對於單表來說隨着記錄增多,性能還是下降很快;
1 分表可以在代碼層級實現;
2 也可以用數據庫中間件實現,現在流行的有 mycat和sharing-sphere
MyCAT目前通過配置文件的方式來定義邏輯庫和相關配置:
· MYCAT_HOME/conf/schema.xml中定義邏輯庫,表、分片節點等內容;
· MYCAT_HOME/conf/rule.xml中定義分片規則;
· MYCAT_HOME/conf/server.xml中定義用戶以及系統相關變量,如端口等。
單表數據達到多少的時候會影響數據庫的查詢性能?為什么?
答:一般mysql達到100w,就影響數據庫的查詢性能,
分庫分表中垂直分庫方案會帶來哪些問題?
答:單表的數據量還是會很大。
分布式數據存儲中間件如mycat的核心流程是什么?
答:攔截sql解析 ->數據源分配 -> 請求響應 -> 結果整合
Mycat中間件的原理?
當Mycat收到一個SQL時,會先解析這個SQL,查找涉及到的表,然后看此表的定義,如果有分片規則,則獲取到SQL里分片字段的值,並匹配分片函數,得到該SQL對應的分片列表,然后將SQL發往這些分片去執行,最后收集和處理所有分片返回的結果數據,並輸出到客戶端。
以select * from Orders where prov=?語句為例,查到prov=wuhan,按照分片函數,wuhan返回dn1,於是SQL就發給了MySQL1,去取DB1上的查詢結果,並返回給用戶。
Mycat的在分庫分表之后,它是怎么支持聯表查詢的?
使用好ER表,在sql上添加注解,用全局表。
就是將一個表按照字段來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。
優勢:比沒有分表來說,提高了查詢速度,降低了查詢結果所用內存;
劣勢:沒有解決大量記錄的問題,對於單表來說隨着記錄增多,性能還是下降很快;