当前位置: 首页 > wzjs >正文

网站建设教程吧百度提交入口网址截图

网站建设教程吧,百度提交入口网址截图,哪些网站可以做文字链广告,大学生文创产品设计方案文章目录 五.ShardingSphere 数据库中间件5.1分库分表概述5.2 数据库拆分策略5.3本机安装多个mysql5.4 MYSQL实现读写分离(主从同步)5.5 ShardingSphere简介5.6 ShardingSphere-JDBC5.7 ShardingSphere-JDBCmybatisplus读写分离(水平拆分库&a…

文章目录

  • 五.ShardingSphere 数据库中间件
    • 5.1分库分表概述
    • 5.2 数据库拆分策略
    • 5.3本机安装多个mysql
    • 5.4 MYSQL实现读写分离(主从同步)
    • 5.5 ShardingSphere简介
    • 5.6 ShardingSphere-JDBC
    • 5.7 ShardingSphere-JDBC+mybatisplus
      • 读写分离(水平拆分库)
      • 分库分表(水平拆分)
        • 分表
        • 分库分表
      • 分库分表(垂直拆分)

五.ShardingSphere 数据库中间件

数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫 ?

1.关系型数据库本身比较容易成为系统瓶颈:单机存储容量、数据库连接数、处理能力都有限。

2.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使做了优化索引等操作, 查询性能仍下降严重。

方案1:

通过提升服务器硬件能力来提高数据处理能力,比如增加存储容量 、CPU等,这种方案成本很高,并且如果瓶颈在MySQL本身那么提高硬件也是有很的。

方案2:

把数据分散在不同的数据库中,使得单一数据库的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的;

5.1分库分表概述

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题;

1.将原来独立的数据库拆分成若干数据库组成;

2.将原来的大表(存储近千万数据的表)拆分成若干个小表;

目的:使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

5.2 数据库拆分策略

根据业务场景拆分:

  • 垂直拆分

    业务维度

  • 水平切分

    数据维度

  • 混合切分

    业务+数据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1. 垂直分割
垂直分割是将一个表按照列的方式拆分成多个表,减少单个表的记录数和列数,提高查询性能。垂直分割一般
分为两种: 基于功能分割和基于范式分割。例如,将一个用户表拆分为登录信息表、用户信息表和账户信息表。
2. 水平分割
水平分割是将一个表按照行的方式拆分成多个表,将数据存储到多个服务器上,提高查询性能。水平分割一般按照主键或按照特定的列进行分割。例如,将一个订单表按照订单号拆分成多个表。
4. 读写分离
读写分离是将对数据库的读操作和写操作拆分到不同的服务器上,减轻单个数据库的负载压力,提高查询性能。例如,将一个电商网站的读取操作分配到从数据库上,将写操作分配到主数据库上。
5. 分片
分片是将一个大型数据表按照某个维度拆分成多个小的数据表,并将数据存储到多个服务器上。分片一般按照分片键进行分割,例如,将一个电商网站的订单表按照某个地理位置分割成多个子表

5.3本机安装多个mysql

【点击这里✔】

5.4 MYSQL实现读写分离(主从同步)

设定mysql3391为主,mysql3392为从

修改mysql3391中my.ini文件信息

在[mysqld]最后添加如下代码(手动新建mysql4072log文件夹)

log-bin=D:\mysql8.0log\mysql-binbinlog-do-db=smbms

在这里插入图片描述

重启服务并输入命令查看日志信息

在这里插入图片描述

000001最新的版本信息

位置默认到157

注意:可以另外在创建一个新的用户以供连接使用,此处我使用root

修改3392中的my.ini文件,并重启服务

在[mysqld]最后添加如下代码

在这里插入图片描述

log-bin=E:\\software\mysql8\mysql4072log\mysql-bin
replicate-do-db=smbms
log-slave-updates

在Navicat中依次执行,进行信息绑定:

stop slave;change master to
master_host='127.0.0.1',master_port=3391,master_user='root',master_password='sa123456',master_log_file='mysql-bin.000001',master_log_pos=157;start slave;show slave status;

在这里插入图片描述

此时会发现有个错误,如图:

在这里插入图片描述

在这里插入图片描述

Fatal error: The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

如果失败,尝试修改uuid

在这里插入图片描述

随便修改一个数字即可,保存重启mysql3392服务。

在这里插入图片描述

重启启动mysql3392,在把上Navicat中命令依次执行,

在这里插入图片描述

此时读写分离设置完成。

在mysql3391数据库中修改信息,可以同步到mysql3392中。

5.5 ShardingSphere简介

Apache ShardingSphere是一款开源的分布式数据库中间件组成的生态圈,它由ShardingJDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立的产品组成。ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的 计算和存储能力,而并非实现一个全新的关系型数据库。

  1. Sharding-JDBC:被定位为轻量级Java框架,在Java的JDBC层提供的额外服务,以jar包形式使用。
  2. Sharding-Proxy:被定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版 本,用于完成对异构语言的支持。
  3. Sharding-Sidecar:被定位为Kubernetes或Mesos的云原生数据库代理,以DaemonSet的形式代理所有对数据库的访问。

5.6 ShardingSphere-JDBC

ShardingSphere-JDBC 是 ShardingSphere 的第一个产品,也是 ShardingSphere 的前身, 我们经常简称之为:sharding-jdbc 。 它定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

sharding-jdbc 的本质上就是实现 JDBC 的核心接口。

在这里插入图片描述

5.7 ShardingSphere-JDBC+mybatisplus

读写分离(水平拆分库)

(前提是mysql3391,和mysql3392实现主从同步。)

mysql3391中smbms为主库,mysql3392中smbms为从库

2个库中都需同时存在smbms_bill表,要求结构相同

在这里插入图片描述

【引入jar包】

 <!--驱动包--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency><!--阿里数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

【编写yml文件(注意缩进)】

在这里插入图片描述

【application.yml】

server:port: 8080mybatis-plus:type-aliases-package: com.hz.pojo.Billconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: false #驼峰映射spring:profiles:active: rwSplit #读写分离

【application-rwSplit.yml】

#file: noinspection SpringBootApplicationYaml
spring:shardingsphere:props:sql:show: truemasterslave:name: masterSlavemaster-data-source-name: db1 #主库slave-data-source-names: db2 #从库 从库有多个可以用逗号隔开
#      load-balance-algorithm-type: round-robin #从库负载均衡轮询datasource:names: db1,db2db1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3391/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456db2:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3392/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456main:allow-bean-definition-overriding: true #允许覆盖注册 bean

【实体类】

@Data
@TableName("smbms_bill")
public class Bill {@TableId(type = IdType.AUTO)private Integer id;   //idprivate String billCode; //账单编码private String productName; //商品名称private String productDesc; //商品描述private String productUnit; //商品单位private BigDecimal productCount; //商品数量private BigDecimal totalPrice; //总金额private Integer isPayment; //是否支付private Integer providerId; //供应商IDprivate Integer createdBy; //创建者private Date creationDate; //创建时间private Integer modifyBy; //更新者private Date modifyDate;//更新时间}
@Mapper
public interface BillMapper extends BaseMapper<Bill> {/*** @description:* @author: weiyi* @date: 2025/2/19 15:52* @param: []* @return: int**/@Select("select count(1) from smbms_bill")public int selectBillCount();}
@SpringBootTest
class ShardingJdbc01ApplicationTests {@Autowiredprivate BillMapper billMapper;@Testvoid insert(){Bill bill = new Bill();bill.setBillCode("123");bill.setProductName("测试");bill.setProductDesc("测试");billMapper.insert(bill);}@Testvoid contextLoads() {billMapper.selectBillCount();}}

在这里插入图片描述

在这里插入图片描述

可以看到查询读取数据时,是从从库db2中读取的,插入数据时是向db1中插入。此时db2也同步新增的数据。

在这里插入图片描述

分库分表(水平拆分)

分表:在同一数据库下创建两张订单表,要求结构相同,让id为奇数数据放入smbms_bill_2中,id为偶数数据放入smbms_bill_1中,分开存储数据,查询是合并在一起。

分库分表:在3391与3392下创建smbms02数据库,在3391下创建smbms_bill_1,在3392下创建smbms_bill_2

分表

分表:在同一数据库下创建两张订单表,要求结构相同,让id为奇数数据放入smbms_bill_2中,id为偶数数据放入smbms_bill_1中,分开存储数据,查询是合并在一起。

在这里插入图片描述

【application.yml】

server:port: 8080mybatis-plus:type-aliases-package: com.hz.pojo.Billconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: false #驼峰映射#spring:
#  profiles:
#    active: rwSplit #读写分离spring:profiles:active: 分库分表 #读写分离

【application-分库分表.yml】

#file: noinspection SpringBootApplicationYaml
spring:shardingsphere:props:sql:show: true #打印sqldatasource:names: db1db1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3391/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456sharding:tables:smbms_bill: #逻辑表名字actual-data-nodes: db1.smbms_bill_${1..2} # 创建了两个表,下标1和2 如果在同一数据库下,只做分表 db1.smbms_bill_1,db1.smbms_bill_2key-generator:type: SNOWFLAKE #雪花算法column: iddatabaseStrategy: #如果只分表,可不设置,也就是往的数据库插inline: # 指定表的分片策略shardingColumn: id #参与分片运算的列名algorithmExpression: db1 #分片算法table-strategy:inline: #指定表的分片策略sharding-column: idalgorithm-expression: smbms_bill_${id % 2 +1} #分片规则main:allow-bean-definition-overriding: true #允许覆盖注册 bean

【实体类】

@Data
@TableName("smbms_bill")
public class Bill {// @TableId(type = IdType.AUTO)private Long id;   //idprivate String billCode; //账单编码private String productName; //商品名称private String productDesc; //商品描述private String productUnit; //商品单位private BigDecimal productCount; //商品数量private BigDecimal totalPrice; //总金额private Integer isPayment; //是否支付private Integer providerId; //供应商IDprivate Integer createdBy; //创建者private Date creationDate; //创建时间private Integer modifyBy; //更新者private Date modifyDate;//更新时间}
 @Testvoid insert(){Bill bill = new Bill();bill.setBillCode("123");bill.setProductName("测试1");bill.setProductDesc("测试1");billMapper.insert(bill);}@Testvoid contextLoads() {billMapper.selectBillCount();}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到根据id的奇偶性分开插入不同的数据库,在查询时还是查询的总记录数。

分库分表

(将主从同步设置关闭)

分库分表:在3391与3392下创建smbms02数据库,在3391下创建smbms_bill_1,在3392下创建smbms_bill_2,表中数据清空

在这里插入图片描述

【application.yml】

server:port: 8080mybatis-plus:type-aliases-package: com.hz.pojo.Billconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: false #驼峰映射#spring:
#  profiles:
#    active: rwSplit #读写分离spring:profiles:active: 分库分表 #读写分离

【application-分库分表.yml】

#file: noinspection SpringBootApplicationYaml
spring:shardingsphere:props:sql:show: true #打印sqldatasource:names: db1,db2db1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3391/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456db2:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3392/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456sharding:tables:smbms_bill: #逻辑表名字actual-data-nodes: db$->{1..2}.smbms_bill_${1..2} #db1.smbms_bill_1,db2.smbms_bill_2 #db$->{1..2}.smbms_bill_${1..2} # 创建了两个表,下标1和2 如果在同一数据库下,只做分表 db1.smbms_bill_1,db1.smbms_bill_2key-generator:type: SNOWFLAKE #雪花算法column: iddatabaseStrategy: #如果只分表,可不设置,也就是往的数据库插inline: # 指定表的分片策略shardingColumn: id #参与分片运算的列名algorithmExpression: db$->{id % 2 +1} #分片算法table-strategy:inline: #指定表的分片策略sharding-column: idalgorithm-expression: smbms_bill_$->{id % 2 +1} #分片规则main:allow-bean-definition-overriding: true #允许覆盖注册 bean
@SpringBootTest
class ShardingJdbc01ApplicationTests {@Autowiredprivate BillMapper billMapper;@Testvoid insert(){Bill bill = new Bill();bill.setBillCode("123");bill.setProductName("测试1");bill.setProductDesc("测试1");billMapper.insert(bill);}@Testvoid contextLoads() {billMapper.selectBillCount();}}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到数据根据id的奇偶性不同插入不同的数据库中的表里面,在查询时,可以查询所有记录。

分库分表(垂直拆分)

分别创建数据库smbms01与smbms02

smbms01中创建表smbms_bill

smbms02中创建表smbms_user
在这里插入图片描述

【application.yml】

server:port: 8080mybatis-plus:type-aliases-package: com.hz.pojo.Billconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: false #驼峰映射#spring:
#  profiles:
#    active: rwSplit #读写分离#spring:
#  profiles:
#    active: 分库分表 #读写分离spring:profiles:active: 垂直拆分 #读写分离

【application-垂直拆分.yml】

#file: noinspection SpringBootApplicationYaml
spring:shardingsphere:props:sql:show: true #打印sqldatasource:names: db1,db2db1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3391/smbms01?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456db2:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3392/smbms02?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: sa123456sharding:tables:smbms_bill: #逻辑表名字actual-data-nodes: db1.smbms_bill smbms_user: #逻辑表名字actual-data-nodes: db2.smbms_user main:allow-bean-definition-overriding: true #允许覆盖注册 bean
@Mapper
public interface UserMapper extends BaseMapper<SmbmsUser> {}
@Data
@TableName("smbms_user")
@ToString
public class SmbmsUser {@TableId(type = IdType.AUTO)private Long id; //idprivate String userCode; //用户编码private String userName; //用户名称private String userPassword; //用户密码private Integer gender;  //性别private Date birthday;  //出生日期private String phone;   //电话private String address; //地址private Integer userRole;    //用户角色private Integer createdBy;   //创建者private Date creationDate; //创建时间private Integer modifyBy;     //更新者private Date modifyDate;   //更新时间}
@SpringBootTest
class ShardingJdbc01ApplicationTests {@Autowiredprivate UserMapper userMapper ;@Testvoid insertUser(){SmbmsUser smbmsUser = new SmbmsUser();smbmsUser.setUserCode("123");smbmsUser.setUserName("测试6666");smbmsUser.setUserPassword("123");smbmsUser.setUserRole(1);userMapper.insert(smbmsUser);}@Testvoid contextLoads02() {billMapper.selectBillCount02(2L);}}

在这里插入图片描述

查询成功:

在这里插入图片描述

插入成功:

在这里插入图片描述

但是,不能表连接。
http://www.dtcms.com/wzjs/434443.html

相关文章:

  • 那个网站教做冰鲜鱼网络营销的方法有哪些?
  • 品牌网站建设 蝌蚪小7网页设计框架
  • 做网站跟桌面程序差别大吗南宁seo排名首页
  • 网站运营建设的培训班网站排名seo软件
  • 扬州做网站的网络公司h5下一页
  • asp网站vps搬家朋友圈推广广告
  • wordpress的按装方法做seo推广一年大概的费用
  • 淘宝推广平台有哪些广东宣布即时优化调整
  • 网络服务合同纠纷管辖权关系网站优化公司
  • 专业网站建设哪里好抖音账号权重查询入口
  • 网站推广岗位职责大数据营销成功案例
  • 保定网站建设服务网站关键词百度自然排名优化
  • 舟山网站建设优化搜索词
  • 企业网站的视频页如何做注册一个公司网站需要多少钱
  • 做网站高亮网站如何做推广
  • 网站通知模板广告推广的软件
  • 做网站分为几种武汉官网优化公司
  • 自己域名做网站南宁百度seo排名价格
  • 在哪个网站做兼职靠谱seo站内优化教程
  • 学习网站开发多少钱江苏网站建站系统哪家好
  • 河南微网站开发嵌入式培训班一般多少钱
  • 中文网页模板免费河北seo技术
  • 南通市经济开发区建设局网站西安百度关键词排名服务
  • 手机网站 搜索优化 百度放单平台
  • 网站的运营与管理软文是什么
  • 北京网站手机站建设公司万网域名注册
  • .tv可以做门户网站不seo网站优化推荐
  • 免费外网服务器ip地址使用 ahrefs 进行 seo 分析
  • 江西省赣州市南康家具城免费网站做seo
  • 自助做网站哪家好网页设计个人网站