温馨提示:这篇文章已超过394天没有更新,请注意相关的内容是否还可用!
摘要:本文将介绍如何使用Spring Boot整合ShardingSphere,实现多线程分批插入操作,处理大量数据(例如插入10,000条记录)。通过整合ShardingSphere,我们可以利用它的分库分表功能,提高数据处理效率和性能。本文将详细阐述配置过程、关键代码实现以及注意事项,帮助开发者在实际项目中快速集成并实现多线程分批插入数据的功能。
ShardingSphere是一套开源的分布式数据库中间件解决方案,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这三款相互独立的产品组成,它们都提供标准化的数据分片、分布式事务和数据库治理功能,适用于各种应用场景,如Java同构、异构语言、容器、云原生等。
ShardingSphere定位为关系型数据库中间件,旨在合理地在分布式场景下利用关系型数据库的计算和存储能力,而非实现一个全新的关系型数据库,它与NoSQL和NewSQL是并存而非互斥的关系。
Sharding-JDBC
Sharding-JDBC是轻量级的Java框架,在Java的JDBC层提供额外服务,它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
Sharding-Proxy
Sharding-Proxy是透明化的数据库代理端,封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持,它向应用程序完全透明,可直接当做MySQL使用,适用于任何兼容MySQL协议的客户端。
3. Sharding-Sidecar(TBD)
Sharding-Sidecar是云原生的数据库代理,以DaemonSet的形式代理所有对数据库的访问,它关注的是如何将分布式的数据访问应用与数据库有机串联起来,关注的是交互,是将杂乱的应用与数据库之间的交互有效梳理。
为什么使用ShardingSphere
从性能角度来说,关系型数据库大多采用B+树类型的索引,在数据量超过阈值的情况下,索引深度的增加将导致磁盘访问的IO次数增加,进而导致查询性能的下降;高并发访问请求也使得集中式数据库成为系统的最大瓶颈。
从可用性的方面来讲,服务化的无状态型使得能够随意扩容,这必然导致系统的最终压力落在数据库之上,单一的数据节点或者简单的主从架构已经越来越难以承担,数据库的可用性成为整个系统的关键。
从运维成本方面考虑,当一个数据库实例中的数据达到阈值以上,对于DBA的运维压力就会增大,数据备份和恢复的时间成本都将随着数据量的大小而愈发不可控。
在传统的关系型数据库无法满足互联网场景需要的情况下,将数据存储至原生支持分布式的NoSQL的尝试越来越多,但NoSQL对SQL的不兼容性以及生态圈的不完善,使得它们在与关系型数据库的博弈中始终无法完成致命一击,而关系型数据库的地位依然稳固。
数据分片
水平分片又称为横向拆分,它不再根据业务逻辑分类数据,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分,根据主键分片,偶数主键的记录放入0库(或表),奇数主键的记录放入1库(或表)。
水平分片就是把一张大表的数据进行一个水平切割,将切割出来的不同的部分添加到不同的表当中,我们举这样的一个例子,在一家银行中,最开始只开放了一个业务窗口,因为一开始的业务量不大,一个窗口足以解决一天当中的所有问题,但由于业务量的增长,一个窗口不够用了,需要多开几个窗口分担业务压力,我们设定一下,一共开放5个窗口,去哪个窗口取决于个人的身份证最后一位%5取余+1的结果,对于实际的业务来说,我们也是如此,一张订单表我们可以根据订单号进行取余操作分配表。
除了分表之外我们还可以分库,具体的思想还是一致的。
SpringBoot整合ShardingSphere
步骤一:创建数据库及表格
在数据库ds0和ds1中创建表格t_order0、t_order1和t_order2。
步骤二:引入依赖
为了进行多线程分库分表插入操作,需要引入以下依赖:
<!-- ShardingSphere JDBC core starter for Spring Boot --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.0.0</version> </dependency> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <!-- 请注意版本号 --> </dependency> ……(省略其他依赖) ……(省略application.yml配置说明) ……(省略实体类、Mapper接口、Service接口及实现类的代码) ……(省略ExecutorConfig配置) ……(省略AsyncService接口和实现类的代码) ……(补充Controller
还没有评论,来说两句吧...