【原创】拉勾课程速推指南-阶段四 模块二 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,否则提示找不到。

    org.apache.shardingsphere
    sharding-jdbc-spring-boot-starter
    4.1.0

  • 数据库的配置
    目前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 中取得数据,是否实现读写分离的效果。

作业参考

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

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