Sharding-JDBC—黑马—2019-09-23

视频链接

一.:Sharding 概述(1~10)

1:分库分表的方式:

   1)垂直分库:
在这里插入图片描述
在这里插入图片描述

   2)垂直分表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

   3)水平分库:(把同一个表的数据,根据规则,放入到不同的数据库)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

   4)水平分表:(单表数据 1500万 就很大了)
在这里插入图片描述
在这里插入图片描述

   5)总结:
在这里插入图片描述


2:分库分表,带来的问题:

在这里插入图片描述
   1)事务一致性问题:
    -1:由于 分库分表,把数据分布在不同数据库,甚至不同服务器。
    -2:不可避免会带来 分布式事务 的问题

   2)跨节点关联查询:
在这里插入图片描述

   3)跨节点分页,排序函数:
在这里插入图片描述
在这里插入图片描述

   4)主键避重:
在这里插入图片描述

   5)公共表问题:(又叫:广播表)
在这里插入图片描述


3:Sharding-JDBC 介绍:(当当网开源的)

   1)核心:数据分片 + 读写分离。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4:与 JDBC 性能对比:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述




二.:Shrding-JDBC 快速入门(11~16)(水平分表)

1:需求说明:

在这里插入图片描述

2:环境搭建:

   1)环境说明:
在这里插入图片描述

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://114.215.173.88:3306/order_db
    username: root
    password: ROOT.root.123
    type: com.alibaba.druid.pool.DruidDataSource

mybatis:
  mapper-locations: classpath:mybatis/mapper/OrderMapper.xml
  configuration:
    map-underscore-to-camel-case: true
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

-- 引入 sharding-jdbc 与 springboot 整合依赖
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</dependency>

   2)数据库准备:

create database order_db;

create table t_order_1 (
    order_id     bigint(20) primary key comment '订单id',
    price        decimal(10, 2) not null comment '订单价格',
    user_id      bigint(20)     not null comment '下单用户id',
    order_status varchar(50)    not null comment '订单状态'
);

create table t_order_2 (
    order_id     bigint(20) primary key comment '订单id',
    price        decimal(10, 2) not null comment '订单价格',
    user_id      bigint(20)     not null comment '下单用户id',
    order_status varchar(50)    not null comment '订单状态'
);



3:编写程序:

   1)分片规则配置:
    -1:分片规则配置:是 Sharding-JDBC 进行对分库分表操作的重要依据。
    -2:配置内容包括:数据源、主键生成策略、分片策略等。
    -3:配置文件 yml:

#---------- 配置分片规则 ----------开始 #
spring.shardingsphere.datasource.names=db1
# 1:定义数据源
spring.shardingsphere.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.db1.url=jdbc:mysql://114.215.173.88:3306/order_db
spring.shardingsphere.datasource.db1.username=root
spring.shardingsphere.datasource.db1.password=ROOT.root.123
spring.shardingsphere.datasource.db1.type=com.alibaba.druid.pool.DruidDataSource

# 2:指定 t_order 表的 数据分布情况,配置数据节点
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=db1.t_order_$->{
   1..2}

# 3:指定 t_order 表的 主键生成策略为:SNOWFLAKE
spring.shardingsphere.sharding.tables.t_order.key-generator.column=order_id
spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE

# 4:指定 t_order 表的 分片策略,分片策略包括:分片键 + 分片算法
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{
   order_id % 2 + 1}

# 5:打印 sql 输出日志,查看执行的真实 sql
spring.shardingsphere.props.sql.show=true
#---------- 配置分片规则 ----------结束 #

spring.main.allow-bean-definition-overriding=true
# mybatis 配置
mybatis.mapper-locations=classpath:mybatis/mapper/OrderMapper.xml
mybatis.configuration.map-underscore-to-camel-case=true
logging.level.com=debug

   2)数据操作,测试:

@SpringBootTest
class Springboot02ShardingjdbcHeimaApplicationTests {
   

    @Autowired
    private OrderMapper orderMapper;

    @Test
    void add() {
   	// 插入订单
        OrderEntity orderEntity = new OrderEntity();
        orderEntity.setPrice(new BigDecimal(20.5));
        orderEntity.setOrderStatus("1");
        orderEntity.setUserId(200L);
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介 随着互联网的发展,软件的规模在逐渐变大,用关系型数据库如何存储和处理大规模的业务数据成为企业面临的挑战, 关系型数据库作为OLTP(联机事务处理过程)系统的首选毋庸置疑,但是关系型数据面对大规模数据的处理有其先天的不足,比如单表存储上千万数据时便会出现不同程度的处理速度缓慢问题,如何解决?分库分表技术就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。本课程将系统的讲解分库分表技术。 课程价值 分库分表技术是为解决关系型数据库存储和处理大规模数据的问题,主要应用于OLTP系统,它与应用于OLAP(联机分析处理)的大数据技术有不同的应用场景,本课程本着从解决生产实际问题出发,讲授分库分表技术的解决方案,包括:垂直分库、垂直分表、水平分库、水平分表、读写分离,涵盖了分库分表的各种方案,并且深入讲解Sharding-JDBC框架的原理及使用方法,通过学习本课程可以快速应用到生产实践中。 课程优势 本课程不仅讲解多种有效的分库分表的解决方案,还深入讲解了Sharding-JDBC框架的原理和使用方法,Sharding-JDBC是一套轻量级的对代码零侵入的框架,在生产中有广泛的使用。本课程从思想原理、技术框架、案例实操三个方面去学习,可以快速的将分库分表技术应用到生产实践中,解决大数据存储与处理的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值