【原创】拉勾课程速推指南-阶段四 模块二 MySQL海量数据存储与优化(下)

文章内容输出来源:拉勾教育Java高薪训练营

学习心得

【拉勾课程速推指南】学习心得

课程介绍

第四阶段 大型分布式存储系统架构进阶
模块二 MySQL海量数据存储与优化(下)
本模块主要对MySQL海量数据处理中的分库分表架构、ShardingSphere、MyCat中间件实战应用、数据库实战规范、以及一些运维分析工具等内容进行讲解。

作业内容

采⽤Sharding-JDBC实现c_order表分库分表+读写分离

  1. 基于user_id对c_order表进⾏数据分⽚


  2. 分别对master1和master2搭建⼀主⼆从架构
  3. 基于master1和master2主从集群实现读写分离
  4. c_order建表SQL如下:
CREATE TABLE `c_order`(
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `is_del` bit(1) NOT NULL DEFAULT 0 COMMENT '是否被删
除',
 `user_id` int(11) NOT NULL COMMENT '⽤户id',
 `company_id` int(11) NOT NULL COMMENT '公司id',
 `publish_user_id` int(11) NOT NULL COMMENT 'B端⽤户id',
 `position_id` int(11) NOT NULL COMMENT '职位ID',
 `resume_type` int(2) NOT NULL DEFAULT 0 COMMENT '简历类型:
0附件 1在线',
 `status` varchar(256) NOT NULL COMMENT '投递状态 投递状态
WAIT-待处理 AUTO_FILTER-⾃动过滤 PREPARE_CONTACT-待沟通 REFUSE-拒绝
ARRANGE_INTERVIEW-通知⾯试',
 `create_time` datetime NOT NULL COMMENT '创建时间',
 `update_time` datetime NOT NULL COMMENT '处理时间',
 PRIMARY KEY (`id`),
 KEY `index_userId_positionId` (`user_id`, `position_id`),
 KEY `idx_userId_operateTime` (`user_id`, `update_time`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

课程目录及观看建议

2倍速模式

  • 课程:1小时
    需要观看Sharding-JDBC的分库配置内容。
  • 作业:2小时
    主要花费在搭建虚拟机系统环境上,可以沿用上次作业环境或者克隆已经搭建好的虚拟机镜像,提高速度。

*** 必看
** 建议看
* 可不看

任务一:分库分表实战

任务二:ShardingSphere实战

  1. ShardingSphere项目介绍(14:59)*
  2. Sharding-JDBC之功能介绍(07:54) *
  3. Sharding-JDBC之内部结构剖析(18:55)
  4. Sharding-JDBC之分片核心概念(20:40)
  5. Sharding-JDBC之分片算法和策略剖析(22:29)
  6. Sharding-JDBC之分片流程剖析(08:35)
  7. Sharding-JDBC之分片SQL使用规范(13:54)
  8. Sharding-JDBC之分片分页优化方案(07:55)
  9. Sharding-JDBC之Inline行表达式解析(14:38)
  10. Sharding-JDBC之主键生成原理(08:42)
  11. Sharding-JDBC实战之案例环境搭建(15:26)***
  12. Sharding-JDBC实战之职位分库业务(17:23)***
  13. Sharding-JDBC实战之职位分库测试(07:50)***
  14. Sharding-JDBC实战之职位主键生成器(16:43)***
  15. Sharding-JDBC实战之职位拆表+分库(17:01)***
  16. Sharding-JDBC实战之城市广播表(07:50)
  17. Sharding-JDBC实战之订单分库分表(25:18)***
  18. 读写分离和数据分片概念回顾(11:21)
  19. 读写分离应用架构方案(07:21)
  20. Sharding-JDBC之读写分离功能介绍(09:10)
  21. Sharding-JDBC实战之读写分离应用(16:33)***
  22. Sharding-JDBC之Hint强制路由剖析(15:04)
  23. Sharding-JDBC实战之Hint强制路由应用(15:07)
  24. Sharding-JDBC之数据脱敏实现架构剖析(07:38)
  25. Sharding-JDBC之数据脱敏配置剖析(07:26)
  26. Sharding-JDBC之数据脱敏处理流程剖析(06:05)
  27. Sharding-JDBC之加密策略解析(12:37)
  28. Sharding-JDBC实战之用户密码加密(20:30)
  29. 分布式事务之CAP和BASE回顾(06:46)
  30. 分布式事务之2PC和3PC模式回顾(20:43)
  31. 分布式事务之XA模式剖析(10:38)
  32. 分布式事务之TCC模式剖析(11:57)
  33. 分布式事务之基于消息队列的TCC模式剖析(10:58)
  34. 分布式事务之基于Saga模式剖析(10:04)
  35. 分布式事务之基于Seata框架AT模式剖析(11:55)
  36. Sharding-JDBC整合XA原理(11:55)
  37. Sharding-JDBC整合Saga原理(10:10)
  38. Sharding-JDBC整合Seata原理(11:05)
  39. Sharding-JDBC分布式事务实战(20:59)
  40. Sharding-JDBC之SPI加载解析(10:39)
  41. Sharding-JDBC之编排治理解析(15:01)
  42. Sharding-Proxy之功能和使用介绍(05:49)
  43. Sharding-Proxy之职位表分库实战(16:56)
  44. Sharding-Proxy之SpringBoot+Proxy实战(10:49)

任务三:Mycat实战

任务四:运维工具

注意点:

  1. 需要准备多个虚拟机环境,如果磁盘空间不足,每个分片至少保证1主1从(已与导师确认)。

  2. 克隆虚拟镜像的场合,需要重新生成MySQL的UUID,否则会有冲突。

$ mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
$ systemctl start mysqld.service
  1. 配置文件推荐采用properties格式,便于参考课程demo,快速完成作业。如需使用yml格式,需要去官网查阅具体内容(和properties内容不一致,但是官网内容可能有版本冲突)。

  2. 官网提示:行表达式标识符可以使用 ${...}$->{...},但前者与Spring本身的属性文件占位符冲突,因此在Spring环境中使用行表达式标识符建议使用 $->{...}

  3. {0..1}表示分库分表的编号开始和结束范围,选择值由 inline.algorithm-expression 的计算结果决定。比如:

  • {0..1}的计算表达式为 inline.algorithm-expression=master$->{user_id % 2}
  • {1..2}的计算表达式为 inline.algorithm-expression=master$->{user_id % 2 + 1}
  1. 官网内容不一定是最新的,有可能有版本冲突。所以尽量不参考官网配置,避免踩坑。
    例如:
  • maven依赖包
    应该为 sharding-jdbc-spring-boot-starter,不是官网的 shardingsphere-jdbc-core,否则提示找不到。
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.0</version>
</dependency>
  • 数据库的配置
    目前apache sharding-jdbc 4.1.0配合springboot 2.3.0、hikari应该为 jdbc-url,不是官网的 url
spring.shardingsphere.datasource.ds0.jdbc-url=xxx
  1. 需要的环境依赖
$ yum -y install wget
$ cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
$ yum -y install wget
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum clean all
$ yum makecache
$ yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y

观后感

可以直接看课程资料中的pdf笔记。

作业说明

作业思路

  1. 使用宿主机(安装虚拟机的真实机器)创建具有读写功能的演示项目,并使用Sharding-JDBC进行分库的设置。
  2. 先在宿主机的MySQL环境中测试代码和配置,实现分库分表效果。
  3. 再使用虚拟机搭建两组主从架构的MySQL环境。
  4. 最后在宿主机中使用该工程访问虚拟机中MySQL环境,分库分表的基础上再实现读写分离。

实现步骤

  1. 创建SpringBoot项目
    a. 引入Sharding-JDBC相关依赖。
    b. 使用JPA实现读写数据库操作。
    c. 在Test方法中调用dao层方法,进行数据的插入和查询。

  2. 配置Sharding-JDBC属性文件
    a. 先配置分库分表的效果,参考课程【17. Sharding-JDBC实战之订单分库分表】。
    b. 再配置读写分离的效果,参考课程【21. Sharding-JDBC实战之读写分离应用】。

  3. 搭建虚拟机环境
    a. 主从架构搭建步骤见上次作业内容。
    b. 可以使用上次作业的环境,或者搭建好一个虚拟机环境后使用克隆(记得重新生成MySQL的UUID),快速完成。
    c. 因为机器磁盘空间不足,只搭建了两个从节点,分别为 slave1slave3(已与导师确认过)。
    d. 最后使用四个虚拟机环境,分别是 master1master2slave1slave3(见架构图)。

  4. 进行测试
    a. 运行插入数据的测试方法,确认数据是否分别插入到 master1master2 两个数据库中,是否再次进行了分表处理。
    b. 运行查询数据的测试方法,确认是否是从 slave1slave3 中取得数据,是否实现读写分离的效果。

作业参考

班主任要求直播后才能开放

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,548评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,497评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,990评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,618评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,618评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,246评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,819评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,725评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,268评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,356评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,488评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,181评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,862评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,331评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,445评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,897评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,500评论 2 359