干货满满:基于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 的微服务架构脚手架,满满的干货来啦~