使用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是当当 ...
随机推荐
- kettle--组件(1)--值映射
组件:值映射 如下如所示: 首先,给出官方给出的文档: 个人理解: Target field name:可以理解为将source column的字段复制为另一个target column的名字. De ...
- java基础讲解08-----类和对象
1.什么是面向对象? 面向对象设计的实质 就是对现实世界的对象进行建模操作. 现实的生活中,随处可见的一种事物就是对象,对象是事物存在的实体,通常我们将会对对象划分为两个部分,静态部分和动态部分.比如 ...
- sql server xtype 对应数据类型名称sql查询
SELECT c.name,c.user_type_id,t.name FROM sys.[columns] AS c INNER JOIN sys.types AS t ON t.user_type ...
- node.js express安装问题
Windows下安装npm和express 1.如果不能在线安装,可以下载npm的zip解压到本地,然后把下面的bin目录加入到path中. 2.搞定npm后,执行了npm install expre ...
- 将XML格式的字符串封装成DOM对象
在java端将字符串转化为xml对象可以使用DocumentHelper.parseText(xmlReturn).getRootElement(); 在js中同样有方法可以将字符串转化为xml对象, ...
- etymology-F
forsake [fə'seɪk] vt.放弃:断念. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400 ...
- Python爬去图片实例,python 爬取图片
# coding:utf-8 import requests import re import time proxies = { "http": "http://124. ...
- NGUI中获取鼠标在控件内部坐标
在UIWidget 中添加以下函数.获得的坐标系是以右上角为原点坐标,x轴向左,一轴向下. public Vector2 GetTouchPoint() { Vector3 p0 = cachedT ...
- 选择如何的系统更能适合App软件开发人员?
手机这个词早已经同吃喝玩乐一样.成为了人们生活中的必备元素. 尤其是iPhone一炮走红之后,不但手机世界发生了巨大变化,整个科技产业似乎都格局性的改变.直至今日,手机市场的竞争更是日趋白炽化,这就给 ...
- mahout相关介绍
https://blog.csdn.net/xiaopihaierletian/article/details/72674592 https://www.cnblogs.com/zlslch/p/67 ...