使用ShardingJdbc分表
项目中做个统一订单的基础服务(只记录订单的基本的公共信息),1、便与后续各种其他业务的接入~ 2、同时APP端提供统一订单信息的查询入口,后续其他业务不用升级
由于统一的订单服务,所以订单量会很大,所以目前考虑进行分表操作,
1、分表方案
一:基于Poxy MyCat中数据库中间件
优点:功能强大,对应用侵入小,不需要改代码
缺点:搭建更复杂,需要专门部署中间件
二:基于Sharding jdbc 开发框架
优点:轻量级java组件,部署简单~ 集成一个jar
缺点:对应用有入侵,需要修改代码
采用当当sharding jdbc (https://www.jianshu.com/p/dd47dd3b1f6b)
2、分表策略
(1)容量粗略估算 每天10w订单 一个月300W订单
(2) 分表数量 5张 每张 300w共 5 * 300W = 150000
( 3)分表维度
按用户标识进行分表
后续需要考虑~~~
(4) 扩容问题 : 按用户标识分表后如何解决扩容?一致性hash?
(5) 数据分离:前5个月的数据如何归档到历史库?
3、分表实践
(1)maven仓库
maven {url 'https://mvnrepository.com/artifact/io.shardingjdbc/sharding-jdbc-core'}
(2) Sharding JDBC依赖
增加 sharding jdbc 和 HikariCP 连接池
compile('io.shardingsphere:sharding-jdbc-spring-boot-starter:3.0.0.M1')
compile('com.zaxxer:HikariCP')
(3)增加配置
# 分库策略
sharding:
jdbc:
datasource:
names: order_service
order_service:
type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://**/order_service
username: root
password: **
config:
sharding:
tables:
t_order:
actual-data-node: order_service.t_order_${0..4}
table-strategy:
inline:
sharding-column: user_id
algorithm-expression: t_order_${user_id % 5}
数据库名 order_service
逻辑表名 t_order (所有查询可以基于逻辑表名)
分表列 user_id
分表算法:user_id % 5
下面可以基于mybatis 对逻辑表t_order 进行增、删、改操作 具体sharding jdbc 使用方法略
使用ShardingJdbc分表的更多相关文章
- Sharding-Jdbc实现分表分库
Sharding-Jdbc分表分库LogicTable数据分片的逻辑表,对于水平拆分的数据库(表),同一类表的总称.订单信息表拆分为2张表,分别是t_order_0.t_order_1,他们的逻辑表名 ...
- 利用Sharding-Jdbc实现分表
你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订单跟雪花一样纷沓而来. 慢慢地,你的心情开始变差,因为客户和产品的抱怨越来越频繁,抱怨的最多的一个问题就 ...
- 利用sharding-jdbc分库分表
sharding-jdbc是当当开源的一款分库分表的数据访问层框架,能对mysql很方便的分库.分表,基本不用修改原有代码,只要配置一下即可,完整的配置参考以下内容: <?xml version ...
- 当当开源sharding-jdbc,轻量级数据库分库分表中间件
近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据 ...
- 解读分库分表中间件Sharding-JDBC
[编者按]数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据 ...
- 学习sharding-jdbc 分库分表扩展框架
先丢代码地址 https://gitee.com/a247292980/sharding-jdbc 再丢pom.xml的dependency <properties> <projec ...
- Sharding-jdbc实现分库分表
首先在pom文件中引入需要的依赖 <dependency> <groupId>io.shardingjdbc</groupId> <artifactId> ...
- spring boot sharding-jdbc实现分佈式读写分离和分库分表的实现
分布式读写分离和分库分表采用sharding-jdbc实现. sharding-jdbc是当当网推出的一款读写分离实现插件,其他的还有mycat,或者纯粹的Aop代码控制实现. 接下面用spring ...
- SpringBoot使用Sharding-JDBC分库分表
本文介绍SpringBoot使用当当Sharding-JDBC进行分库分表. 1.有关Sharding-JDBC 有关Sharding-JDBC介绍这里就不在多说,之前Sharding-JDBC是当当 ...
随机推荐
- oc 阿拉伯数字转中文数字
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.numberStyle = NSNumberFor ...
- unity3d通过代码动态创建销毁游戏对象
只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.Create ...
- 将Cmder添加到系统右键菜单中
1.把 Cmder 加到环境变量 把Cmder.exe存放的目录添加到系统环境变量: 加完之后,Win+r一下输入cmder,即可. 2.添加 cmder 到右键菜单:环境变量添加后,在任意文件夹中即 ...
- Mac 常用的手势
可以在触屏版-更多手势查看 技巧:前期慢慢滑动练习.一定要慢慢滑动,这样可以清楚的看出有没有产生效果,尤其注意大拇指滑动的感觉. 回到桌面:四指向外 打开Lanuchpad:四指向内 查看所有任务:三 ...
- laravel 访问不存在的路由跳转问题!(异常处理)
1.如果你只是想抛出404错误,debug开关可以满足你: 理论上你把 debug 关了,线上环境是会自动到 404 的. 是想要「跳转到 404 页」还是「显示 404 页」?如果是要跳转的话,请配 ...
- UINavigationController 返回按钮去掉文字
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetric ...
- 封面式 code-代码助手
1 保存代码 2 搜索代码 3 生成网页 下载地址: http://gudianxiaoshuo.com
- HTML5自定义属性之data-index
#使用jquery获取data-index的值 jquery 的版本最好高一些 #html <div id = 'div'><span data-field='demo'>&l ...
- js从数组中提取数字
某班的成绩出来了,现在老师要把班级的成绩打印出来. 效果图: XXXX年XX月X日 星期X--班级总分为:81 格式要求: 1.显示打印的日期. 格式为类似“XXXX年XX月XX日 星期X” 的当前的 ...
- oracle,mysql分页
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...