使用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 使用方法略


       

猜你喜欢

转载自www.cnblogs.com/mxmbk/p/9717995.html