apache shardingsphere4.0.0分表例子
-
背景
老项目中的数据库使用的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+""; } }
-
过程需要注意的内容
- 主键生成方式,及与原来主键的字段长度是否冲突。雪花算法生成的是19位长度的long型。
- 是否需要分库,分库时事务的实现方式。
- 现有业务代码中的sql,是否与shardingsphere兼容。是否兼容可以看官方文档。
-
测试结果
在开发环境中测试,20线程并发,并无发现性能下降,在某些查询查询性能有啥提示。预估在生产环境会有性能提升。
修改前,20并发,修改操作:
分表后,20并发,修改操作:
- Windows 下 Apache URL重写例子 解决静态资源后携带 ;jsessionid 信息而无法被Apache解析的问题
- Apache Ignite 2.3使用例子与问题总结
- Apache虚拟主机配置简单例子
- apache中url重写 例子
- Java异步执行多个HTTP请求的例子(需要apache http类库)
- apache-storm例子:统计句子中的单词数量
- [Apache Maven Shade Plugin] [example] [001] 官方例子:includes-excludes
- Nginx + Apache 的优化例子一则
- 开发Apache模块例子
- 研究tomcat和apache的整合成功例子
- apache的xml-rpc例子
- puppet apache模块的例子
- 2013.09.05--debian自启动--以apache httpd为例子
- Apache mod_wsgi web.py例子
- Apache ShardingSphere数据脱敏全解决方案详解
- Apache Commons Pool的入门例子
- delphi + apache + cgi 最简单的例子
- apache的xml-rpc例子
- puppet apache模块的例子
- apache.httpclient工具包HTTP连接池请求例子