Spring Boot Sharding JDBC 实现库表分片

小夏 科技 更新 2024-01-19

当数据量比较大(我们没有接触过)时,我们会考虑分库分表的策略。 当然,分库分表分为多种策略:

拆分数据库,实现数据分离(多租户设计)。

水平拆分表:类似于数据分片。

垂直拆分表:一些不常用的字段放在另一个表中,我们通过主键进行关联,这在上一篇文章中也提到过 MySQL表设计规范

在去年疫情发生时,其实shigen我研究了这个,但当时使用了它apache-shardingsphere,使用官方资源包,需要各种安装和配置:

最近发现它实际上可以与springboot我研究了它,发现它非常有用。

官方配置文档在这里,如果需要详细步骤,可以到官网查看案例和说明。

首先,我们创建两个数据库,每个数据库有两个表:

对应关系是这样的:

shigen以前创建的数据库和数据表的名称如下所示:

demo-ds-0user_1,发现配置有问题,直接爆了。

最后,将其更改为不下划线是正常的。

一切准备就绪后,让我们开始今天的案例。

当然,这是对MySQL驱动程序的核心依赖mybatis-plus这里也需要它。

我们用魔法来生成相应的controllerservicedao

这里我就直接粘贴我的配置,更多配置可以参考官网。

实际上,它看起来很有趣:

使用 druid 作为数据库连接池工具,它自带了一个可以监控我们 SQL 的后端

我们表格的拆分是基于用户的id,如果 id 是偶数,则放在 user0 中,odd 放在 user1 中

数据库根据用户进行拆分年龄,其中年龄为偶数,放在 DS0 中,反之亦然

打印详细的 SQL 执行语句。

就是这样,事实上,它帮助我们简化了复杂的配置。 现在,让我们编写一个测试测试。

我已经测试了 1-99。

看看运行的结果:

我们再看一下数据库:

这是非常意料之中的,ds0 中的年龄是奇数,user0 中的 id 是偶数;表明我们的测试进行得很顺利。

其实还是那句话,具体场景的具体分析,没有这么大的数据量,库表的分片是一个复杂且完全不必要的设计。 也希望能提供技术选型和参考。

绝对sharding-jdbc它还支持读写分离,恰到好处shigen还有一篇关于springboot+mybtais-plus中读写分离实现的文章,敬请期待下一篇文章!

作者: shigen01

友情链接: juejincn/post/7307838693146525730

相似文章