背景
我们当前项目有如下要求:
- 一个服务端给多个终端提供服务(老板不肯多买一台服务器部署)
- 多个终端之间的数据,我想要隔离(对了对了,就是这个要求,让我想到了ShardingSphere)
问题
我估计懂的朋友会问了:不对不对,你这个需求,一个动态多数据源不是搞定了吗?
答:确实是的。
:那为何你还要用ShardingSphere呢?
答:虽然我最后还是放弃了这个方案,但我最初选择这个方案,主要还是想学习一下这个东西。并且,查阅资料后,让我错误的以为,可以满足我的需求。事实上,我想要实现的业务目的是:分库不分表,也即:数据隔离。。 呜呜呜…
自我扫盲
言归正传,这边,我总结一下我这两天看资料之后,给自己总结的初步扫盲攻略,我估计有的朋友们第一次看ShardingSphere技术文档的时候,也会跟我有一样的疑惑。先来一张配置表示例:
假设,数据源为m1,逻辑表名称course,以这个为例子
# 指定表的分布情况 配置表在哪个数据库里,表名是什么。水平分表,分两个表:m1.course_1,m1.course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.course_$->{1..2}
# 指定表的主键生成策略
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
#雪花算法的一个可选参数
spring.shardingsphere.sharding.tables.course.key-generator.props.worker.id=1
#指定逻辑表course的分表策略---------------------------重点--------------------------------
#指定分片键
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column= cid
#指定分片算法
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid%2+1}
#---------------------------------------------------重点---------------------------------
#指定逻辑表course的分库策略--------------------------重点--------------------------------
#指定分片键
spring.shardingsphere.sharding.tables.course.databse-strategy.inline.sharding-column= cid
#指定分片算法
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m_$->{cid%2+1}
#---------------------------------------------------重点---------------------------------
【盲点一】ShardingSphere不适合只分库,不分表的场景。我也查阅了很多资料才逐渐意识到,ShardingSphere这个东西,往透了说,它针对的是分表这个使用场景,或者说,“分库分表”这两个东西是不能拆开来讲的,是原子性的。 如果你跟我一样,没有分表的需求,只是想要分库做数据隔离的话,绕道走吧,这个真不适合! 不是说做不了,而是,如果你真要实现的话,那么,你得给每一张表做一个“分库分表”策略!即,对于表course跟表user,或者其他xxx表,都要有一个对应的.properties文件配置(当然你可以合在一张配置表,我只是给你解释”一张表一个配置”这个逻辑关系而已)
【盲点二】“一表一配置”。每一张你需要做数据隔离的业务表,都要分别设置对应的分库、分表策略。关于(官网链接:ShardingSphere核心概念),官网给出的概念-分片的每个元素,都是必不可少的。
一开始我以为,我不需要分表,那么我不用设置分表策略啊,我只需要做数据隔离,那我只需要做好分库策略就好了呀! 不不不xdm,it is my fault。我所有的认知,都是建立在我以为“可以只分库,不分表”这个错误的认知上。事实上,分库策略也是针对某个表的分库策略,不能一次性设置针对所有表的分库策略。如果你有100张业务表想要做分库,那你就要给这100张表,分别做分库策略。(这不就是我的业务场景了吗,我需要对我现有所有表,甚至包括字典、配置表,都要隔离)
结语
最后,声明一下,这是我自己的一些个人总结,不一定正确哦。主要是,网上全都是教程,千篇一律的,根本没有针对初学者,想用但是不知道适合不适合的扫盲文。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/180551.html