IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Springboot整合ShardingSphere(ShardingJDBC)】扫盲文(并非代码实战) -> 正文阅读

[Java知识库]【Springboot整合ShardingSphere(ShardingJDBC)】扫盲文(并非代码实战)

背景

我们当前项目有如下要求:

  1. 一个服务端给多个终端提供服务(老板不肯多买一台服务器部署)
  2. 多个终端之间的数据,我想要隔离(对了对了,就是这个要求,让我想到了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张表,分别做分库策略。(这不就是我的业务场景了吗,我需要对我现有所有表,甚至包括字典、配置表,都要隔离)

结语

最后,声明一下,这是我自己的一些个人总结,不一定正确哦。主要是,网上全都是教程,千篇一律的,根本没有针对初学者,想用但是不知道适合不适合的扫盲文。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:50:24  更:2022-08-19 18:52:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:23:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码