mysql读写分离实战准备一

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 一目的 首先准备一个web网站,这里模拟一个网站的页面,主要对开源网页实现动态存取,之后将使用本页面进一步实现对mysql的读写分离功能 二架构 前台是开源网页的页面,具体例子可从如下网站下载 http://www.

一目的

首先准备一个web网站,这里模拟一个网站的页面,主要对开源网页实现动态存取,之后将使用本页面进一步实现对mysql的读写分离功能

二架构

前台是开源网页的页面,具体例子可从如下网站下载

http://www.superslide2.com/

后台采用springboot+thymeleaf开发

1前端页面整合

复制网站实例页面,到如下路径/template/case1page

  复制静态页面包括js文件到/static

2后台整合

Pom中加入相应jar包依赖,且未方便开发可以加入热部署相关依赖,例如

<build>

         <plugins>

              <plugin>

                   <groupId>org.springframework.boot</groupId>

                   <artifactId>spring-boot-maven-plugin</artifactId>

                   <dependencies>

                <!-- spring热部署-->

                <dependency>

                    <groupId>org.springframework</groupId>

                    <artifactId>springloaded</artifactId>

                    <version>1.2.1.RELEASE</version>

                </dependency>

              </dependencies>

              </plugin>

         </plugins>

     </build>

 

整合mybatis

Application中编写设置注入数据源和SqlSessionFactory的方法如下

@Bean

    @ConfigurationProperties(prefix="spring.datasource")

    public DataSource dataSource() {

        return new org.apache.tomcat.jdbc.pool.DataSource();

                 //com.alibaba.druid.pool.DruidDataSource();

    }

3 数据库设计

主要采用两个表SD_CATEGORYSD_LABLE_SWITCH,存放对应页面中标题和标题中相关的详细数据。具体建表和数据可见附件脚本

 

三实际功能

页面中实现了12demo的动态效果

已第11demo为例。说明实现方式

1静态页面中数据样式如下

<li class="nLi">

                                               <h3><a href="http://www.SuperSlide2.com" target="_blank">新闻

                                               <ul class="sub">

                                                        <li><a href="#">新闻首页</li>

                                                        <li><a href="#">新闻人物</li>

                                                        <li><a href="#">新闻电视</li>

                                                        <li><a href="#">新闻图片</li>

                                                        <li><a href="#">新闻视频</li>

                                                        <li><a href="# ">新闻专题</li>

                                               </ul>

                            </li>

                            <li class="nLi">

                                               <h3><a href="http://www.SuperSlide2.com" target="_blank">预告片

                                               <ul class="sub">

                                                        <li><a href="#">新闻首页</li>

                                                        <li><a href="#">新闻人物</li>

                                                        <li><a href="#">新闻电视</li>

                                                        <li><a href="#">新闻图片</li>

                                                        <li><a href="#">新闻视频</li>

                                                        <li><a href="# ">新闻专题</li>

                                               </ul>

                            </li>

根据上面数据显示方式确定现在后台存放数据的结构是,用一个对象存放标题和条目数据(List),然后再用一个组列表存放这些对象,已此来对应页面的结构

2页面显示方式如下

<li class="nLi" th:each="list:${grp11List}">

                            <h3><a href="http://www.SuperSlide2.com" target="_blank" th:text="${list.TP_NM}">新闻</a></h3>

                            <ul class="sub">

                                  <li th:each="lableList:${list.lable}">

                                    <a href="#">

                                     <p th:text="${lableList.LAB_NM}">新闻首页</p>

                                    </a>

                                   </li>

                                 

                            </ul>

                 </li>

 

后台存放方式

在处理对应demo实例的controller里组织数据的逻辑如下

//查找标题

      List<GrpTitle> grpTitle = userService.getGrpTitle(caseId);

      //查找每个标题时,找出所有对应lable数据并放入一个grplist

      for (GrpTitle title : grpTitle) {

            List<Lable> lable = userService.getLableInfo(title.getGRP_ID());

            FullContent cont = new FullContent();

            cont.setTP_NM(title.getTP_NM());

            cont.setLable(lable);

            //把所有grplist放到一个list

            grpList.add(cont);

           }

      //加入case1 返回需要的结果

      model.addAttribute("grp11List", grpList);

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL - 深入理解锁机制和实战场景
MySQL - 深入理解锁机制和实战场景
|
3月前
|
关系型数据库 MySQL
电子好书发您分享《MySQL MGR 8.0高可用实战》
电子好书发您分享《MySQL MGR 8.0高可用实战》 电子好书发您分享《MySQL MGR 8.0高可用实战》
90 1
|
3月前
|
关系型数据库 MySQL 数据库
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
134 0
|
3月前
|
关系型数据库 MySQL
电子好书发您分享《MySQL高并发场景实战》
电子好书发您分享《MySQL高并发场景实战》
23 1
|
24天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
95 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础与实战应用
MySQL数据库基础与实战应用
48 0
|
3天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
23 6
|
10天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
【4月更文挑战第9天】InnoDB数据库使用B+树作为索引模型,其中主键索引的叶子节点存储完整行数据,非主键索引则存储主键值。主键查询只需搜索一棵树,而非主键查询需两次搜索,因此推荐使用主键查询以提高效率。在插入新值时,B+树需要维护有序性,可能导致数据页分裂影响性能。自增主键在插入时可避免数据挪动和页分裂,且占用存储空间小,通常更为理想。然而,如果场景仅需唯一索引,可直接设为主键以减少查询步骤。
13 1
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
|
12天前
|
存储 SQL 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-02
【4月更文挑战第7天】数据库通过视图实现事务隔离,不同隔离级别如读未提交、读已提交、可重复读和串行化采用不同策略。以可重复读为例,MySQL使用多版本并发控制(MVCC),每个事务有其独立的视图。回滚日志在无更早视图时被删除。长事务可能导致大量存储占用,应避免。事务启动可显式用`begin`或设置`autocommit=0`,但后者可能意外开启长事务。建议使用`autocommit=1`并显式管理事务,若需减少交互,可使用`commit work and chain`。
28 5
|
14天前
|
SQL 存储 关系型数据库
【MySQL实战笔记】02.一条SQL更新语句是如何执行的-2
【4月更文挑战第5天】两阶段提交是为确保`redo log`和`binlog`逻辑一致,避免数据不一致。若先写`redo log`, crash后数据可能丢失,导致恢复后状态错误;若先写`binlog`,crash则可能导致重复事务,影响数据库一致性。一天一备相较于一周一备,能缩短“最长恢复时间”,但需权衡额外的存储成本。
16 1