MyCat分片:水平拆分例項解析和程式碼實現!
一、概述
根據表中的資料的邏輯關係,將
同一個表中的資料按照某種條件拆分到多臺資料庫(主機)上面,這種切分稱之為
資料的水平(橫向)切分。
二、案例場景
在業務系統中, 有一張表(日誌表), 業務系統每天都會產生大量的日誌資料 , 單臺伺服器的資料儲存及處理能力是有限的, 可以對資料庫表進行拆分, 原有的資料庫表拆分成以下表 :
三、準備工作
1.準備三臺資料庫例項
192.168.192.157 192.168.192.158 192.168.192.159
2.在三臺資料庫例項中建立資料庫
create database log_db DEFAULT CHARACTER SET utf8mb4;
四、schema.xml的配置
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="
<schema name="LOG_DB" checkSQLschema="false" sqlMaxLimit="100">
<table name="tb_log" dataNode="dn1,dn2,dn3" primaryKey="id" rule="mod- long" />
</schema>
<dataNode name="dn1" dataHost="host1" database="log_db" />
<dataNode name="dn2" dataHost="host2" database="log_db" />
<dataNode name="dn3" dataHost="host3" database="log_db" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.192.157:3306" user="root" password="itcast"></writeHost>
</dataHost>
<dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="192.168.192.158:3306" user="root" password="itcast"></writeHost>
</dataHost>
<dataHost name="host3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM3" url="192.168.192.159:3306" user="root" password="itcast"></writeHost>
</dataHost> </mycat:schema>
五、server.xml的配置
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">LOG_DB</property> </user> <user name="test">
<property name="password">123456</property>
<property name="schemas">LOG_DB</property> </user> <user name="user">
<property name="password">123456</property>
<property name="schemas">LOG_DB</property>
<property name="readOnly">true</property> </user>
六、測試
1.在MyCat資料庫中執行建表語句
CREATE TABLE `tb_log` (
`id` bigint(20) NOT NULL COMMENT 'ID',
`model_name` varchar(200) DEFAULT NULL COMMENT '模組名',
`model_value` varchar(200) DEFAULT NULL COMMENT '模組值',
`return_value` varchar(200) DEFAULT NULL COMMENT '返回值',
`return_class` varchar(200) DEFAULT NULL COMMENT '返回值型別',
`operate_user` varchar(20) DEFAULT NULL COMMENT '操作使用者',
`operate_time` varchar(20) DEFAULT NULL COMMENT '操作時間',
`param_and_value` varchar(500) DEFAULT NULL COMMENT '請求引數名及引數值',
`operate_class` varchar(200) DEFAULT NULL COMMENT '操作類',
`operate_method` varchar(200) DEFAULT NULL COMMENT '操作方法',
`cost_time` bigint(20) DEFAULT NULL COMMENT '執行方法耗時, 單位 ms',
`source` int(1) DEFAULT NULL COMMENT '來源 : 1 PC , 2 Android , 3 IOS',
PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.插入資料
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`, `return_class`, `operate_user`,
`operate_time`, `param_and_value`, `operate_class`, `operate_method`, `cost_time`,`source`)
VALUES('1','user','insert','success','java.lang.String','10001','2020-02-26 18:12:28','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','insert','10',1);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,`return_class`, `operate_user`,
`operate_time`, `param_and_value`, `operate_class`, `operate_method`, `cost_time`,`source`)
VALUES('2','user','insert','success','java.lang.String','10001','2020-02-26 18:12:27','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','insert','23',1);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`, `return_class`, `operate_user`,
`operate_time`, `param_and_value`, `operate_class`, `operate_method`, `cost_time`,`source`)
VALUES('3','user','update','success','java.lang.String','10001','2020-02-26 18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','update','34',1);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`, `return_class`, `operate_user`,
`operate_time`, `param_and_value`, `operate_class`, `operate_method`, `cost_time`,`source`)
VALUES('4','user','update','success','java.lang.String','10001','2020-02-26 18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','update','13',2);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`, `return_class`, `operate_user`,
`operate_time`, `param_and_value`, `operate_class`, `operate_method`, `cost_time`,`source`)
VALUES('5','user','insert','success','java.lang.String','10001','2020-02-26 18:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.cont roller.UserController','insert','29',3);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,`return_class`, `operate_user`,
`operate_time`, `param_and_value`, `operate_class`,`operate_method`, `cost_time`,`source`)
VALUES('6','user','find','success','java.lang.String','10001','2020-02 2618:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.cont roller.UserController','find','29',2);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2764217/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mycat 水平切分|垂直切分|ER分片
- MyCat分片:分片規則的十四種演算法詳細解讀&程式碼實現(上篇)演算法
- Mycat中介軟體實現Mysql資料分片(上篇)MySql
- Mycat中介軟體實現Mysql資料分片( 下篇)MySql
- vuejs實現新增tag標籤程式碼例項VueJS
- 例項程式碼分享Python實現Linux監控PythonLinux
- 簡單介紹正規表示式拆分url例項程式碼
- html實現簡單ListViews效果的例項程式碼HTMLView
- Mycat水平分表
- 正則實現個位數補零程式碼例項
- Vue原始碼解析:Vue例項Vue原始碼
- mycat分片及主從(二)
- python 單一程式例項 實現Python
- Python物件導向多型實現原理及程式碼例項Python物件多型
- canvas translate()、scale()和rotate()方法程式碼例項Canvas
- Vue 原始碼解析(例項化前) - 響應式資料的實現原理Vue原始碼
- Vue 原始碼解析(例項化前) – 響應式資料的實現原理Vue原始碼
- Mybatis原始碼解析2—— 例項搭建MyBatis原始碼
- MySQL垂直拆分和水平拆分的優缺點和共同點總結MySql
- Mycat中的特性----資料分片
- Python實現簡單網頁圖片抓取完整程式碼例項Python網頁
- dom操作程式碼例項
- css梯形程式碼例項CSS
- 透過Span實現高效能陣列,例項解析陣列
- Python scrapy增量爬取例項及實現過程解析Python
- 一個線性迴歸例項的公式推導、程式碼實現、問題解析以及模型評價公式模型
- 三行CSS程式碼實現水平垂直居中CSS
- 手把手教你使用OpenCV庫(附例項、Python程式碼解析)OpenCVPython
- HTML 使用表單標籤實現註冊頁面的例項程式碼HTML
- JavaScript in運算子程式碼例項JavaScript
- 設計模式例項程式碼設計模式
- table表格美化程式碼例項
- jQuery控制div顯示和隱藏程式碼例項jQuery
- 純css tab選項卡程式碼例項CSS
- jQuery tab選項卡效果程式碼例項jQuery
- android widget 開發例項 : 桌面便籤程式的實現詳解和源Android
- Mycat分片方案需要解決的問題
- 前端程式碼拆分前端