项目中做个统一订单的基础服务(只记录订单的基本的公共信息),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分表的更多相关文章

  1. Sharding-Jdbc实现分表分库

    Sharding-Jdbc分表分库LogicTable数据分片的逻辑表,对于水平拆分的数据库(表),同一类表的总称.订单信息表拆分为2张表,分别是t_order_0.t_order_1,他们的逻辑表名 ...

  2. 利用Sharding-Jdbc实现分表

    你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订单跟雪花一样纷沓而来. 慢慢地,你的心情开始变差,因为客户和产品的抱怨越来越频繁,抱怨的最多的一个问题就 ...

  3. 利用sharding-jdbc分库分表

    sharding-jdbc是当当开源的一款分库分表的数据访问层框架,能对mysql很方便的分库.分表,基本不用修改原有代码,只要配置一下即可,完整的配置参考以下内容: <?xml version ...

  4. 当当开源sharding-jdbc,轻量级数据库分库分表中间件

    近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据 ...

  5. 解读分库分表中间件Sharding-JDBC

    [编者按]数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据 ...

  6. 学习sharding-jdbc 分库分表扩展框架

    先丢代码地址 https://gitee.com/a247292980/sharding-jdbc 再丢pom.xml的dependency <properties> <projec ...

  7. Sharding-jdbc实现分库分表

    首先在pom文件中引入需要的依赖 <dependency> <groupId>io.shardingjdbc</groupId> <artifactId> ...

  8. spring boot sharding-jdbc实现分佈式读写分离和分库分表的实现

    分布式读写分离和分库分表采用sharding-jdbc实现. sharding-jdbc是当当网推出的一款读写分离实现插件,其他的还有mycat,或者纯粹的Aop代码控制实现. 接下面用spring ...

  9. SpringBoot使用Sharding-JDBC分库分表

    本文介绍SpringBoot使用当当Sharding-JDBC进行分库分表. 1.有关Sharding-JDBC 有关Sharding-JDBC介绍这里就不在多说,之前Sharding-JDBC是当当 ...

随机推荐

  1. kettle--组件(1)--值映射

    组件:值映射 如下如所示: 首先,给出官方给出的文档: 个人理解: Target field name:可以理解为将source column的字段复制为另一个target column的名字. De ...

  2. java基础讲解08-----类和对象

    1.什么是面向对象? 面向对象设计的实质 就是对现实世界的对象进行建模操作. 现实的生活中,随处可见的一种事物就是对象,对象是事物存在的实体,通常我们将会对对象划分为两个部分,静态部分和动态部分.比如 ...

  3. 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 ...

  4. node.js express安装问题

    Windows下安装npm和express 1.如果不能在线安装,可以下载npm的zip解压到本地,然后把下面的bin目录加入到path中. 2.搞定npm后,执行了npm install expre ...

  5. 将XML格式的字符串封装成DOM对象

    在java端将字符串转化为xml对象可以使用DocumentHelper.parseText(xmlReturn).getRootElement(); 在js中同样有方法可以将字符串转化为xml对象, ...

  6. etymology-F

    forsake [fə'seɪk] vt.放弃:断念. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400 ...

  7. Python爬去图片实例,python 爬取图片

    # coding:utf-8 import requests import re import time proxies = { "http": "http://124. ...

  8. NGUI中获取鼠标在控件内部坐标

    在UIWidget 中添加以下函数.获得的坐标系是以右上角为原点坐标,x轴向左,一轴向下. public Vector2 GetTouchPoint() { Vector3 p0 =  cachedT ...

  9. 选择如何的系统更能适合App软件开发人员?

    手机这个词早已经同吃喝玩乐一样.成为了人们生活中的必备元素. 尤其是iPhone一炮走红之后,不但手机世界发生了巨大变化,整个科技产业似乎都格局性的改变.直至今日,手机市场的竞争更是日趋白炽化,这就给 ...

  10. mahout相关介绍

    https://blog.csdn.net/xiaopihaierletian/article/details/72674592 https://www.cnblogs.com/zlslch/p/67 ...