分庫 又 分表? 只做過分表的,分庫 的沒搞過。大體思路:
樂山ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
1、你的數據必須有個主鍵 auto_increasement 屬性,記錄編號能自動增長。
2、設置一個表,里面存記錄范圍(或者查詢條件)對應的表。比如 1-100萬記錄對應 table1,100萬-200萬 對應table2
3、在php里根據查詢條件,找到本次查詢可能涉及到的表,就可以對具體的表進行操作了
1,接收到sql;2,把sql放到排隊隊列中 ;3,執行sql;4,返回執行結果。在這個執行過程中最花時間在什么地方呢?第一,是排隊等待的時間,第二,sql的執行時間。其實這二個是一回事,等待的同時,肯定有sql在執行。所以我們要縮短sql的執行時間。
mysql中有一種機制是表鎖定和行鎖定,為什么要出現這種機制,是為了保證數據的完整 性,我舉個例子來說吧,如果有二個sql都要修改同一張表的同一條數據,這個時候怎么辦呢,是不是二個sql都可以同時修改這條數據呢?很顯然mysql 對這種情況的處理是,一種是表鎖定(myisam存儲引擎),一個是行鎖定(innodb存儲引擎)。表鎖定表示你們都不能對這張表進行操作,必須等我對 表操作完才行。行鎖定也一樣,別的sql必須等我對這條數據操作完了,才能對這條數據進行操作。如果數據太多,一次執行的時間太長,等待的時間就越長,這 也是我們為什么要分表的原因。
mysql要分庫分表怎樣處理
從字面上簡單理解,就是把原本存儲于一個庫的數據分塊存儲到多個庫上,把原本存儲于一個表的數據分塊存儲到多個表上。
一、分庫分表的必要性
分庫分表技術的使用,主要是數據庫產生了瓶頸,如單庫的并發訪問或單表的查詢都超出了閾值。對系統使用造成一定的影響,不得已而產生的技術。
通過分庫分表技術來解決此類問題,但正因為使用此技術,會產生ACID一系列的問題,各類中間件解決此類問題各有各的優勢。
提示:如場景無必要,千萬不要使用分庫分表。
二、分庫分表的思路
1、垂直區分
垂直分庫:從業務角度,一個庫分成多個庫,如把訂單和用戶信息分成兩個庫來存儲。這樣的好處就是可以微服務了。每塊的業務單獨部署,互不影響,通過接口去調用。
垂直分表:把大表分成多個小表,如熱點數據和非熱點數據分開,提高查詢速度。
2、水平區分
水平分表:同一業務如數據量大了以后,根據一定的規則分為不同的表進行存儲。
水平分庫:如訂單分成多個庫存儲,分解服務器壓力。
以上一般來說,垂直分庫和水平分表用的會多些。
三、分庫分表的原理分析
分庫分表常用的方案:Hash取模方案和range范圍方案;
路由算法為最主要的算法,指得是把路由的Key按照指定的算法進行存放;
1、Hash取模方案
根據取余分配到不同的表里。要根據實際情況確認模的大小。此方案由于平均分配,不存在熱點問題,但數據遷移很復雜。
2、Range范圍方案
range根據范圍進行劃分,如日期,大小。此方案不存在數據遷移,但存在熱點問題。
四、分庫分表的技術選型
1、技術選型
解決方案主要分為4種:MySQL的分區技術、NoSql、NewSQL、MySQL的分庫分表。
(1)mysql分區技術:把一張表存放在不同存儲文件。由于無法負載,使用較少。
(2)NoSQL(如MongoDB):如是訂單等比較重要數據,強關聯關系,需約束一致性,不太適應。
(3)NewSql(具有NoSQL對海量數據的存儲管理能力,還保持了傳統數據庫支持ACID和SQL等特性):如TiDB可滿足需求。
(4)MySQL的分庫分表:如使用mysql,此種方案為主流方式。
2、中間件
解決此類問題的中間件主要為:Proxy模式、Client模式。
(1)Proxy模式
(2)Client模式
把分庫分表相關邏輯存放在客戶端,一版客戶端的應用會引用一個jar,然后再jar中處理SQL組合、數據庫路由、執行結果合并等相關功能。
(3)中間件的比較
由于Client模式少了一層,運維方便,相對來說容易些。
五、分庫分表的實踐
根據容量(當前容量和增長量)評估分庫或分表個數 - 選key(均勻)- 分表規則(hash或range等)- 執行(一般雙寫)- 擴容問題(盡量減少數據的移動)。
在這里我們選用中間件share-jdbc。
1、引入maven依賴
2、spring boot規則配置
行表達式標識符可以使用${...}或$-{...},但前者與Spring本身的屬性文件占位符沖突,因此在Spring環境中使用行表達式標識符建議使用$-{...}。
3、創建DataSource
通過ShardingDataSourceFactory工廠和規則配置對象獲取ShardingDataSource,ShardingDataSource實現自JDBC的標準接口DataSource。然后即可通過DataSource選擇使用原生JDBC開發,或者使用JPA, MyBatis等ORM工具。
MySQL單表(innoDB)可以存儲10億級數據,只是這時候性能比較差,業界公認MySQL單表容量在1KW以下是最佳狀態,因為這時它的BTREE索引樹高在3~5之間。
參考阿里開發手冊建議:
1.單表行數超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表;如果預計三年后的數據量根本達不到這個級別,請不要在創建表時就分庫分表。
2.實際情況受mysql機器配置等多方面影響,可能數據量很大但性能依舊不錯,但考慮后續發展一定要進行分庫分表考慮。
根據實際的業務場景選擇合適的分片數據,參考如下:
根據實際的業務場景選擇適當的分片字段,要達到如下要求:
分表數量和分表字段確定后,要設計一個合理的分表規則,良好的分表規則要達到如下條件:
如何保證分片數據均勻,參考:
如何保證方便后續分片擴容,參考:
如何高效的使用分庫分表,核心是做到盡量的路由到最少的表,最好是只路由到一個表里面
核心規則如下:
階段一
階段二
階段三
本文鏈接:
分享名稱:mysql怎么做分庫分表 mysql分庫分表實現
本文來源:http://m.newbst.com/article18/docjpdp.html
成都網站建設公司_創新互聯,為您提供App設計、網站策劃、靜態網站、網頁設計公司、品牌網站建設、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯