sharding-JDBC 分库分表

演示项目数据库主从结构,读写分离,主数据库负责写入,从数据库负责读出.数据库设计 

  1. 数据库设计
    1. PRODUCT_DB 数据库进行水平分库PRODUCT_DB1,PRODUCT_DB2
    2. 商品信息表进行垂直拆分,商品信息表和商品描述表
    3. 商品信息表和商品描述表进行水平分表,商品信息表1,商品描述表1,商品信息表2,商品描述表2
    4. PRODUCT_DB ,STORE_DB 进行业务模块拆分,进行垂直分库
    5. 拥有公共表地理区域表(地理区域表需要在每个数据库中创建,shardingJDBC会同时维护所有数据库中公共表)

sharding-JDBC 分库分表


2.具体如何配置Sharding-JDBC

 配置数据源,m为主数据库,s为从数据库

sharding-JDBC 分库分表

m1.s1.m2.s2以此类推(注:m0,s0于上方dataSource.names中一一对应) 

sharding-JDBC 分库分表


 3.配置主从关系 

(注:m0,s0于上方dataSource.names中一一对应)

sharding-JDBC 分库分表


4.配置分库,分库配置只针对水平分库

   本例中只有PRODUCT_DB进行了水平分库,所以配置的是default-database-strategy

sharding-JDBC 分库分表其他方式配置分库策略

tables.逻辑表名.database-strategy

sharding-JDBC 分库分表


 5.分表策略

因store_info 只有一张表,所以直接如下配置就行

sharding-JDBC 分库分表


sharding-JDBC 分库分表

ID主键的生成规则,使用雪花片的方式生成 

sharding-JDBC 分库分表


product_descript

algorithm-expression 根据product_info_id进行分片策略

sharding-JDBC 分库分表


绑定表关系,注绑定表关系是以数组形式配置的

因为product_info和product_descript是将一张表进行的垂直分表,所以两者是以product_info_id字段进行绑定的两者表

为什么要配置绑定关系,防止出现笛卡尔积现象 

sharding-JDBC 分库分表


公共表 配置

region是公共表,通过广播的方式保证数据一致性

sharding-JDBC 分库分表


 主从数据同步

通过mysql自带的binlog方式实现