地址:https://www.bilibili.com/video/BV1jJ411M78w?from=search&seid=601745923434669949
垂直分表:把不经常用的字段放在一张表,但是放在一个数据库里面。
垂直分库:商品数据库放在一个服务器,店铺数据库放在一个服务器,独立的数据放在两个库,可以不在一个emysql里面。
现在商品信息通过垂直分表变为商品信息和商品详情,商品的店铺信息垂直分库。
水平分表:就是同一个数据库里面水平分库。
水平分库:数据在不同的数据库,数据库的表结构是一样的。单数放在一个表,双数放在一个表。
---p1-p2-p3-p4-p5-p6-p7---
问题:
事务一致性
跨节点关联查询
跨节点分页
跨库主键重复
---
sharingjdbc的核心功能是数据分片和读写分离。
---p8---
表
---p9-p10-p11---
水平分表
分片策略。
步骤:
1.定义数据源
2.指定数据节点
3.主键的生成策略
4.分片策略,分片键和分片算法
---p12---
在configuration配置的话
加入这句话:
---p13-p14-p15-p16---
几个名词 :
逻辑表
真实表
数据节点
绑定表
广播表
分片键
分片算法
分片策略
自增主键生成策略
------------------------------
OLTP面向事务
OLAP面向分析
---p17-p18-p19-P20---
---p20-p21---
水平分库。
第一步配置数据源:
第二步:配置节点
第三步,水平分库策略
第四步:水平分表策略
第五步:主键生成策略
---p22-p23-p24---
垂直分库:
第一步:数据源
第二步:配置节点
第三步:垂直分库策略
第四步:主键生成策略 无
---p25-p27--
公共表
从数据库设置为只读的。
新建数据库:
第一步设置数据源:
第二步设置主从
第三步设置节点,节点是表
---p29-p30---
垂直分库:store_db,product_db
垂直分表:垂直分表 商品信息 商品描述
水平分库:(商品信息1.商品信息2),(商品信息1.商品信息2)
水平分表:数据量还是大的话,商品信息1 商品信息2
---p31---
搭建数据库。
---p32---
配置文件
server.port=56082
spring.application.name = shopping
spring.profiles.active = local
server.servlet.context-path = /shopping
spring.http.encoding.enabled = true
spring.http.encoding.charset = UTF-8
spring.http.encoding.force = true
spring.main.allow-bean-definition-overriding = true
mybatis.configuration.map-underscore-to-camel-case = true
#sharding-jdbc分片规则
#第一步配置数据源 m0,m1,m2,s0,s1,s2 这是数据源
spring.shardingsphere.datasource.names = m0,m1,m2,s0,s1,s2
spring.shardingsphere.datasource.m0.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m0.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.m0.url = jdbc:mysql://192.168.202.140:3306/store_db?useUnicode=true
spring.shardingsphere.datasource.m0.username = root
spring.shardingsphere.datasource.m0.password = 123456
spring.shardingsphere.datasource.m1.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.m1.url = jdbc:mysql://192.168.202.140:3306/product_db_1?useUnicode=true
spring.shardingsphere.datasource.m1.username = root
spring.shardingsphere.datasource.m1.password = 123456
spring.shardingsphere.datasource.m2.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.m2.url = jdbc:mysql://192.168.202.140:3306/product_db_2?useUnicode=true
spring.shardingsphere.datasource.m2.username = root
spring.shardingsphere.datasource.m2.password = 123456
spring.shardingsphere.datasource.s0.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.s0.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.s0.url = jdbc:mysql://192.168.202.141:3306/store_db?useUnicode=true
spring.shardingsphere.datasource.s0.username = root
spring.shardingsphere.datasource.s0.password = 123456
spring.shardingsphere.datasource.s1.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.s1.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.s1.url = jdbc:mysql://192.168.202.141:3306/product_db_1?useUnicode=true
spring.shardingsphere.datasource.s1.username = root
spring.shardingsphere.datasource.s1.password = 123456
spring.shardingsphere.datasource.s2.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.s2.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.s2.url = jdbc:mysql://192.168.202.141:3306/product_db_2?useUnicode=true
spring.shardingsphere.datasource.s2.username = root
spring.shardingsphere.datasource.s2.password = 123456
#第二步主从关系 这个就是三个数据库
spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=m0
spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=s0
spring.shardingsphere.sharding.master-slave-rules.ds1.master-data-source-name=m1
spring.shardingsphere.sharding.master-slave-rules.ds1.slave-data-source-names=s1
spring.shardingsphere.sharding.master-slave-rules.ds2.master-data-source-name=m2
spring.shardingsphere.sharding.master-slave-rules.ds2.slave-data-source-names=s2
#分库策略(水平) 根据字段去哪个库里面找
spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column = store_info_id
spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression = ds$->{store_info_id % 2 + 1}
#分表策略
# store_info分表策略
spring.shardingsphere.sharding.tables.store_info.actual-data-nodes = ds$->{0}.store_info
spring.shardingsphere.sharding.tables.store_info.table-strategy.inline.sharding-column = id
spring.shardingsphere.sharding.tables.store_info.table-strategy.inline.algorithm-expression = store_info
# product_info分表策略
#数据结点包括,ds1.product_info_1,ds1.product_info_2,ds2.product_info_1,ds2.product_info_2
spring.shardingsphere.sharding.tables.product_info.actual-data-nodes = ds$->{1..2}.product_info_$->{1..2}
spring.shardingsphere.sharding.tables.product_info.table-strategy.inline.sharding-column = product_info_id
spring.shardingsphere.sharding.tables.product_info.table-strategy.inline.algorithm-expression = product_info_$->{product_info_id%2+1}
spring.shardingsphere.sharding.tables.product_info.key-generator.column=product_info_id
spring.shardingsphere.sharding.tables.product_info.key-generator.type=SNOWFLAKE
#product_descript分表策略
spring.shardingsphere.sharding.tables.product_descript.actual-data-nodes = ds$->{1..2}.product_descript_$->{1..2}
spring.shardingsphere.sharding.tables.product_descript.table-strategy.inline.sharding-column = product_info_id
spring.shardingsphere.sharding.tables.product_descript.table-strategy.inline.algorithm-expression = product_descript_$->{product_info_id % 2 + 1}
spring.shardingsphere.sharding.tables.product_descript.key-generator.column=id
spring.shardingsphere.sharding.tables.product_descript.key-generator.type=SNOWFLAKE
# 设置product_info,product_descript为绑定表
spring.shardingsphere.sharding.binding-tables[0] = product_info,product_descript
# 设置region为广播表(公共表),每次更新操作会发送至所有数据源
spring.shardingsphere.sharding.broadcast-tables=region
# 打开sql输出日志
spring.shardingsphere.props.sql.show = true
swagger.enable = true
logging.level.root = info
logging.level.org.springframework.web = info
logging.level.com.itheima.dbsharding = debug
---p33---
添加商品,商品被垂直分为了两张表,如何添加呢?
---p34---
测试。
---p35-p36-p37---
分页的多表关联查询如何查询的?
查询:向两个数据库都进行路由的
---p38---
商品 统计
排序和分组一致就是流式归并。否则是内存归并。
---p39---
总结。
---p40---