您的位置:首页 > 运维架构 > Apache

apache shardingsphere4.0.0分表例子

2020-07-13 21:07 169 查看
  • 背景

        老项目中的数据库使用的sqlsever,需要把sqlsever换为mysql数据库。由于表数据约为4亿条,为了减轻mysql压力及提高稳定性,换为mysql后,需要建表数据进行分表。总共分为10张表,每张表约4kw条数据。分表后预计可以满足5年内的业务需求。

  • 代码实现

pom.xml

        <properties>
        <sharding-sphere.version>4.0.0</sharding-sphere.version>
        </properties>

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-core-api</artifactId>
            <version>${sharding-sphere.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-core</artifactId>
            <version>${sharding-sphere.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-orchestration</artifactId>
            <version>${sharding-sphere.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-namespace</artifactId>
            <version>${sharding-sphere.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-orchestration-spring-namespace</artifactId>
            <version>${sharding-sphere.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-transaction-core</artifactId>
            <version>${sharding-sphere.version}</version>
        </dependency>
分表配置:

主键生成的雪花算法使用的workid:

[code]public class SnowflowWorkIdUtil {

public static String getWorkId(){

InetAddress address;
try {
address = InetAddress.getLocalHost();
} catch (final UnknownHostException e) {
throw new IllegalStateException("Cannot get LocalHost InetAddress, please check your network!");
}
// 先得到服务器的hostname,例如JTCRTVDRA44,linux上可通过命令"cat /proc/sys/kernel/hostname"查看;
String hostName = address.getHostName();
int i = Math.abs(hostName.hashCode()) % 1021;
System.out.println("---workId:"+i);
return i+"";
}

public static String getWorkIdRand(){
int i = RandomUtils.nextInt(0, 1024);
return i+"";
}

}
  • 过程需要注意的内容

  1. 主键生成方式,及与原来主键的字段长度是否冲突。雪花算法生成的是19位长度的long型。
  2. 是否需要分库,分库时事务的实现方式。
  3. 现有业务代码中的sql,是否与shardingsphere兼容。是否兼容可以看官方文档。
  • 测试结果

在开发环境中测试,20线程并发,并无发现性能下降,在某些查询查询性能有啥提示。预估在生产环境会有性能提升。

修改前,20并发,修改操作:

分表后,20并发,修改操作:

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: