干货满满:基于ShardingSphere实现动态数据源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货满满:基于ShardingSphere实现动态数据源相关的知识,希望对你有一定的参考价值。

参考技术A 在互联网公司中,或者大型应用系统中,我们作为开发人员通常需要面对海量的数据,这些海量数据通常都是百万级,千万级的数据量。而且这些海量数据对企业和用户来说都是至关重要的。面对如此海量的数据,我们需要保证数据的安全可靠;当保存数据的时候数据不能丢失,当查询数据的时候,需要保证数据的及时响应。

那么,如何保证这些海量数据的安全可靠,以及实时查询呢?

当然,这里肯定会有很多解决方案。在当下大数据时代,出现了很多比较友好的解决方案和框架可以解决这个问题。例如:Elasticsearch,Hadoop等,都是现在比较流行的框架。

目前,大多数企业应用系统中的数据应该都是结构化的,也就是这些海量数据存储在关系型数据库中,例如:mysql,Oracle等。而且Mysql关系型数据库一般都是初创企业或者中小企业的首选。那么Mysql如何承载百万级,千万级的数据呢?根据阿里巴巴的开发守则,建议Mysql的数据表容量不要超过500万条数据记录,也就说建议在500万条数据记录的时候做一次分表。针对Mysql的分库分表已经存在很多成熟,开源的解决方案和框架,例如:Mycat,ShardingSphere等。

但是,在大多数业务场景中Mysql的一个库会有很多表,数据量大的,需要及时响应查询的数据表可能就那么几张,例如:订单表数据量比较大,配置表数据量比较小;我们需要对数据量比较大的订单表进行分库分表操作,配置表可以不需要分库分表。也就是说我们需要对部分表进行分库分表,部分表不进行分库分表。那么我们可以考虑使用ShardingSphere的动态数据源,对需要分库分表的数据我们把正确的数据源路由到正确的库上,把不需要分库分表的表路由到默认的数据库。

下面我们以SpringBoot为例把详细的实践过程记录下来,方便以后查阅。

引入ShardingSphere的maven dependency,采用4.0.0版本

配置多数据源

说明如下:

多数据源配置类

说明如下:

下面配置SpringBoot的数据源

说明如下:

下面是我们自定义的分片算法CustomShardingAlgorithm类

说明如下:

通过以上配置和自定义分片算法,借助ShardingSphere框架我们已经实现了通过携带分片键的增删改查sql语句动态路由数据源。如果操作我们需要分库分表的sql语句没用携带分片键,ShardingSphere会报错并且在日志信息中会看到对应的错误信息。

当然除过ShardingSphere能够实现动态数据源,其他框架或者方式也可以实现,例如:Spring AOP切面,拦截器也可以实现。那么就是仁者见仁,智者见智了。

参考资料:

以上是关于干货满满:基于ShardingSphere实现动态数据源的主要内容,如果未能解决你的问题,请参考以下文章

动态开辟内存的这些知识你知道了吗?了解柔性数组吗?超详细画图以及文字讲解,干货满满

基于Spring Cloud 的微服务架构脚手架,满满的干货来啦~

基于Spring Cloud 的微服务架构脚手架,满满的干货来啦~

基于Spring Cloud 的微服务架构脚手架,满满的干货来啦~

基于Spring Cloud 的微服务架构脚手架,满满的干货来啦~

Activity-过渡动画-—-让切换更加炫酷满满干货指导