还没有 Mysql 数据分片经验?学会这些保你收到面试邀请!
前沿科技bot 技术专栏作品,你想学的都在这里
create database myutilproject0create database myutilproject1use myutilproject0create table TransInfo0( id bigint primary key auto_increment, userid varchar(20) not null, orderid bigint(20) unsigned NOT NULL );create table TransInfo1( id bigint primary key auto_increment, userid varchar(20) not null, orderid bigint(20) unsigned NOT NULL );use myutilproject1create table TransInfo0( id bigint primary key auto_increment, userid varchar(20) not null, orderid bigint(20) unsigned NOT NULL );create table TransInfo1( id bigint primary key auto_increment, userid varchar(20) not null, orderid bigint(20) unsigned NOT NULL );
#设置内置tomcat的启动端口号server:port: 8080mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.kingspringboot.springboot.myProject.com.bean#分库分表配置信息spring:profiles:active: test-ev,jackdking,testbeanonemain:# sharding-jdbc定义了重复的dataSource数据源bean,启动时必须添加以下值allow-bean-definition-overriding: true# sharding-jdbc 分库、分表配置shardingsphere:datasource:names: ds0,ds1ds0:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://192.168.3.9:3306/myutilproject0?characterEncoding=GBK&useSSL=falseusername: jackdkingpassword: ncl@1234driver-class-name: com.mysql.jdbc.Driverds1:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://192.168.3.9:3306/myutilproject1?characterEncoding=GBK&useSSL=falseusername: jackdkingpassword: ncl@1234driver-class-name: com.mysql.jdbc.Driversharding:tables:TransInfo:actual-data-nodes: ds$->{0..1}.TransInfo$->{0..1}table-strategy:inline:#分片规则对应列,即以user_id值作为分片规则的列sharding-column: orderid#分片按user_id列和10取模运算,路由到对应的order0...9的表algorithm-expression: TransInfo$->{orderid % 2}key-generator:column: idtype: SNOWFLAKEdefault-database-strategy:inline:sharding-column: idalgorithm-expression: ds$->{id % 2}props:sql.show: true
actual-data-nodes: ds$->{0..1}.TransInfo$->{0..1} 最终计算得到的最终物理表是 ds[0,1].TransInfo[0,1]
sharding-column: orderid 根据记录的orderid字段来进行分表
algorithm-expression: TransInfo$->{orderid % 2} 分表规则是orderid字段对2取模计算得到的余数拼接到TransInfo的后面即为最终的表名。
-
对于这样的数据库设计架构,我这把可以很方便的将交易表数据迁移到mysql数据库。 -
除了对交易表的数据迁移之外,现在消息队列目前还只是使用redis的list数据结构,不能保证消息的高可用和数据的表之间的数据一致性以及消息的不丢失。
往期技术类文章推荐
技术类太枯燥,看点有趣的
