Mysql实践

参考:
1.【已实践】Mysql安装配置.txt

2.【已实践】MySQL  主从复制的配置.txt

3.【已实践】读写分离-分库分表-sharding-jdbc

实践案例1:订单表的分库分表
例如平台业务系统的订单表:每天会产生80万比交易,每个月将近2000万,作如下的设计:
>> 按一年12个月分成12张表,设计3个数据库,这样3个库每个库12张表;
>> 实际上每个月最高2500的数据,会被平摊到3个库的当月表里,每个库800万数据量,每天每个库表20-30万次插入
数据库和表的路由策略是:
库ID = 订单号%库数量;
表ID = 订单号%表数量

设计:
(1) 库表设计
CREATE SCHEMA IF NOT EXISTS `CFSP_ORDER_01`;
CREATE SCHEMA IF NOT EXISTS `CFSP_ORDER_02`;
CREATE SCHEMA IF NOT EXISTS `CFSP_ORDER_03`;

CREATE TABLE IF NOT EXISTS `CFSP_ORDER_01`.`t_order_201701`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));
....
CREATE TABLE IF NOT EXISTS `CFSP_ORDER_01`.`t_order_201712`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));

CREATE TABLE IF NOT EXISTS `CFSP_ORDER_02`.`t_order_201701`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));
....
CREATE TABLE IF NOT EXISTS `CFSP_ORDER_02`.`t_order_201712`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));

CREATE TABLE IF NOT EXISTS `CFSP_ORDER_03`.`t_order_201701`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));
....
CREATE TABLE IF NOT EXISTS `CFSP_ORDER_03`.`t_order_201712`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));

这里需用root用户建库,然后给xmtest用户相应的权限
CREATE SCHEMA IF NOT EXISTS `CFSP_ORDER_01`;
CREATE SCHEMA IF NOT EXISTS `CFSP_ORDER_02`;
CREATE SCHEMA IF NOT EXISTS `CFSP_ORDER_03`;

grant all privileges on CFSP_ORDER_01.* to 'xmtest'@'%' identified by '123456' WITH GRANT OPTION;
grant all privileges on CFSP_ORDER_02.* to 'xmtest'@'%' identified by '123456' WITH GRANT OPTION;
grant all privileges on CFSP_ORDER_03.* to 'xmtest'@'%' identified by '123456' WITH GRANT OPTION;

注:在这里每个库建一张逻辑表
CREATE TABLE IF NOT EXISTS `CFSP_ORDER_01`.`t_order`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));
CREATE TABLE IF NOT EXISTS `CFSP_ORDER_02`.`t_order`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));
CREATE TABLE IF NOT EXISTS `CFSP_ORDER_03`.`t_order`
(`order_id` INT NOT NULL, `user_id` INT NOT NULL, `status` VARCHAR(50), `transDate` VARCHAR(20)   ,PRIMARY KEY (`order_id`));




(2) 基于sharding-jdbc-mybatis的开发
参考工程:
sharding-jdbc-example-mybatis
sharding-jdbc-example-config-spring-masterslave

实践步骤:
(1) 通过maven构建spring框架 参考:构建SSH框架.txt
新构建项目:YJR-demo-Sharding-jdbc

(2) 在工程中配置:shanrding-jdbc
(3) 实践案例:按不同月份和不同订单号进行分表分库,读写分离测试


配置过程主要做的是:
1.spring-mabatis文件拆分成applicationContext.xml 和 Mybatis配置文件applicationContext-mybatis.xml
2.配置applicationContext-mybatis.xml和jdbc.properties(稍后提取公共部分)
2.1 这里配置库就行了,3个主库,伴随着读的2个从库(也分3个库)


order_01_master  order_01_slave_0  order_01_slave_1

order_02_master  order_02_slave_0  order_02_slave_1

order_03_master  order_03_slave_0  order_03_slave_0




不要忘记:
(1) 提取公共部分(1.提取公共部分 2.使用durid数据源);
(2) 实践中的分页查询
(3) 全局主键/强制使用主库读写
(4) 使用全局ID











4.【已实践】读写分离-分库分表-基于中间件-Mycat

猜你喜欢

转载自zjjndnr.iteye.com/blog/2389787
今日推荐