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


       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM