專案運營期間隨著時間的推移線上環境的資料越來越多,線上的sql跑的越來越慢,當資料表增加的千萬級別資料,單純的增加索引已經不能解決
線上的慢sql問題,這時,分表 ,分割槽,分庫應運而生;小弟不才剛接觸了分表,分庫,現在分享下,有問題多多指教,見笑。
1 mysql分表分為水平切分,和垂直切分
垂直分割(並不常用)
就是將乙個表按照欄位來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。
優勢:比沒有分表來說,提高了查詢速度,降低了查詢結果所用記憶體;
劣勢:沒有解決大量記錄的問題,對於單錶來說隨著記錄增多,效能還是下降很快;
2 水平分割(重要,實際應用中使用最多)
水平分割是企業最常用到的,水平拆分就是大表按照記錄分為很多子表:
1 hash、自增id取模:
對某個字段進行hash來確定建立幾張表,並根據hash結果存入不同的表;
2 按時間
根據業務可以按照天、月、年來進行拆分;
3 按每個表的固定記錄數
一般按照自增id進行拆表,一張表的資料行到了指定的數量,就自動儲存到下一張表中。比如規定一張表只能存1-1000個記錄;
4 將老資料遷移到一張歷史表
比如日誌表,一般只查詢3個月之內的資料,對於超過3個月的記錄將之遷移到歷史子表中;
分表時需要的設計:
查詢時:要根據預定義規則查詢不同的子表;
· mycat_home/conf/schema.xml中定義邏輯庫,表、分片節點等內容;
· mycat_home/conf/rule.xml中定義分片規則;
· mycat_home/conf/server.xml中定義使用者以及系統相關變數,如埠等。
首先server.xml配置 如果是資料庫root使用者配置密碼以及schemas;
如果是其他使用者
user
testdb
true
然後配置schema.xml 檔案
1 分庫操作,像下圖中schema標籤裡面配置;
2 單庫多表
配置rule.xml 規則
根據userid取模分表
4中的count代表分表的數量
這樣mycat的配置基本算是完成了,然後啟動命令
mycat.bat start
啟動後可以通過如下命令檢視mtcat執行狀態
mycat.bat status
可以使用如下命令停止mycat服務
mycat.bat stop
這樣mycat的環境基本部署完成了,下面就是啟動專案
詳情可以檢視git 位址mycatdemo
中資料來源
#配置資料來源
#mycat
的連線賬號和密碼
spring.datasource.druid.username
=root
spring.datasource.druid.password
=123456
#mycat
的邏輯庫
埠也是mycat
的配置檔案的schem名稱
spring.datasource.druid.url
=jdbc:mysql://localhost:8066/testdb
mysql 分庫分表mycat部署
垂直分割 縱向切分 把單一的表,拆分成多個表,並分散到不同的資料庫 主機 上。乙個資料庫由多個表構成,每個表對應不同的業務,可以按照業務對錶進行分類,將其分布到不同的資料 庫 主機 上,實現專庫專用,讓不同的庫 主機 分 擔不同的業務 水平分割 橫向切分 按照表中某個欄位的某種規則,把向表中寫入的記...
mycat實現mysql分庫分表
1.mycat介紹 mycat是乙個開源的分布式資料庫系統,是乙個實現了mysql協議的伺服器,前端使用者可以把它看作是乙個資料庫 用mysql客戶端工具和命令列訪問,而其後端可以用mysql原生協議與多個mysql伺服器通訊,也可以用jdbc協議與大多數主流資料庫伺服器通訊,其核心功能是分表分庫,...
Mycat分庫分表
schema.xml 配置 name dn1 datahost localhost1 database db1 name dn2 datahost localhost1 database db2 name dn3 datahost localhost1 database db3 把localhost...