当数据量比较大(我们没有接触过)时,我们会考虑分库分表的策略。 当然,分库分表分为多种策略:
拆分数据库,实现数据分离(多租户设计)。
水平拆分表:类似于数据分片。
垂直拆分表:一些不常用的字段放在另一个表中,我们通过主键进行关联,这在上一篇文章中也提到过 MySQL表设计规范
在去年疫情发生时,其实shigen
我研究了这个,但当时使用了它apache-shardingsphere
,使用官方资源包,需要各种安装和配置:
最近发现它实际上可以与springboot
我研究了它,发现它非常有用。
官方配置文档在这里,如果需要详细步骤,可以到官网查看案例和说明。
首先,我们创建两个数据库,每个数据库有两个表:
对应关系是这样的:
在shigen
以前创建的数据库和数据表的名称如下所示:
demo-ds-0
user_1
,发现配置有问题,直接爆了。
最后,将其更改为不下划线是正常的。
一切准备就绪后,让我们开始今天的案例。
当然,这是对MySQL驱动程序的核心依赖mybatis-plus
这里也需要它。
我们用魔法来生成相应的controller
service
dao
这里我就直接粘贴我的配置,更多配置可以参考官网。
实际上,它看起来很有趣:
使用 druid 作为数据库连接池工具,它自带了一个可以监控我们 SQL 的后端
我们表格的拆分是基于用户的id,如果 id 是偶数,则放在 user0 中,odd 放在 user1 中
数据库根据用户进行拆分年龄,其中年龄为偶数,放在 DS0 中,反之亦然
打印详细的 SQL 执行语句。
就是这样,事实上,它帮助我们简化了复杂的配置。 现在,让我们编写一个测试测试。
我已经测试了 1-99。看看运行的结果:
我们再看一下数据库:
这是非常意料之中的,ds0 中的年龄是奇数,user0 中的 id 是偶数;表明我们的测试进行得很顺利。
其实还是那句话,具体场景的具体分析,没有这么大的数据量,库表的分片是一个复杂且完全不必要的设计。 也希望能提供技术选型和参考。
绝对sharding-jdbc
它还支持读写分离,恰到好处shigen
还有一篇关于springboot+mybtais-plus中读写分离实现的文章,敬请期待下一篇文章!
作者: shigen01
友情链接: juejincn/post/7307838693146525730