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

呼市网站建设企业网站建设报价表

呼市网站建设,企业网站建设报价表,网站怎么做本地测试,如何做好网站内链1. Sharding-Jdbc 分库分表执⾏核⼼流程 Sharding-JDBC执行流程 1. SQL解析 -> SQL优化 -> SQL路由 -> SQL改写 -> SQL执⾏-> 结果归并 ->返回结果简写为:解析->路由->改写->执⾏->结果归并1.1 SQL解析 1. SQL解析过程分为词法解析…

1. Sharding-Jdbc 分库分表执⾏核⼼流程

在这里插入图片描述

Sharding-JDBC执行流程
1. SQL解析 -> SQL优化 -> SQL路由 -> SQL改写 -> SQL执⾏-> 结果归并 ->返回结果简写为:解析->路由->改写->执⾏->结果归并
1.1 SQL解析
1. SQL解析过程分为词法解析,语法解析。
2. 词法解析:词法解析器用于将SQL拆解为不可再分的原子符号,称为Token,再使用语法解析器将SQL转换为抽象语法树。
3. 抽象语法树的遍历去提炼分片所需的上下文,并标记有可能需要的SQL改写。
1.2 两大SQL路由
1. 分片路由:带分片键,直接路由,标准路由,笛卡尔积路由
2. 广播路由:不带分片键,全库表路由,全库路由,全实例路由等。
1.3 SQL改写
1. Logic SQL逻辑表SQL,不能够直接在真实的数据库表中执行,SQL改写会将逻辑SQL改写为在真实数据库中可以正确执行的ActualSQL.
1.4 SQL执行
1. 采用自动化的执行引擎,将路由和改写完之后的Actual SQL安全且高效发送给底层数据源执行,自动平衡资源控制与执行效率
2. 两大模式:内存限制模式:数据库连接数量不做限制,多线程并发执行效率最大化,适用OLAP操作。连接限制模式:严格控制对一次操作所耗费的数据库连接数量,1库1线程,多库多线程使用OLTP操作,保证数据库资源被足够多应用使用。
1.5结果归并
从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端,功能上可分为遍历,排序,分组,分页和聚合5种。
1. 结构划分两大类:流式-归并:每一次从结果集中获取到的数据,都通过逐条获取的方式返回正确的单条数据,它与数据库原生的返回结果集的方式最为契合。占用了额外的带宽,但不会导致内存暴涨,使用的最多。内存-归并:分片结果集的数据存储在内存中,再通过统一的分组,排序以及聚合等计算之后,再将其封装成为逐条访问的数据结果集返回,消耗内存。

2. 标准分⽚策略-精准分⽚算法《分表》

2.1 标准分⽚策略-精准分⽚算法
StandardShardingStrategy
1. 只⽀持【单分⽚键】,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分⽚算法.
2. PreciseShardingAlgorithm 精准分⽚ 是必选的,⽤于处理=和IN的分⽚.
3. RangeShardingAlgorithm 范围分⽚ 是可选的,⽤于处理BETWEEN AND分⽚.
4. 如果不配置RangeShardingAlgorithm,如果SQL中⽤了BETWEEN AND语法,则将按照全库路由处理,性能下降.
2.2 代码
package com.dss.sharding.strategy;import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;import java.util.Collection;/****/
public class CustomTablePreciseShardingAlgorithm implements PreciseShardingAlgorithm<Long> {/**** @param dataSourceNames 数据源集合*                      在分库时值为所有分片库的集合 databaseNames*                      分表时为对应分片库中所有分片表的集合 tablesNames** @param shardingValue  分片属性,包括*                                  logicTableName 为逻辑表,*                                  columnName 分片健(字段),*                                  value 为从 SQL 中解析出的分片健的值* @return*/@Overridepublic String doSharding(Collection<String> dataSourceNames, PreciseShardingValue<Long> preciseShardingValue) {for(String datasourceName : dataSourceNames){/**通过取模,获取命中的表* value是0,则进⼊0库表,1则进⼊1库表*/String value = preciseShardingValue.getValue() % dataSourceNames.size() + "";//product_order_0,表示命中库if(datasourceName.endsWith(value)){return  datasourceName;}}return null;}
}
2.3配置

spring.application.name=sharding-jdbc
server.port=8080# 打印执行的数据库以及语句
spring.shardingsphere.props.sql.show=true# 数据源 db0
spring.shardingsphere.datasource.names=ds0,ds1# 第一个数据库
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3306/xdclass_shop_order_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root# 第二个数据库
spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3306/xdclass_shop_order_1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root#配置workId
spring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1#配置广播表
spring.shardingsphere.sharding.broadcast-tables=ad_config
spring.shardingsphere.sharding.tables.ad_config.key-generator.column=id
spring.shardingsphere.sharding.tables.ad_config.key-generator.type=SNOWFLAKE#配置【默认分库策略】
#spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=user_id
#spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2 }
#配置分库规则
#spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.sharding-column=user_id
#spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.algorithm-expression=ds$->{user_id % 2 }#id生成策略
spring.shardingsphere.sharding.tables.product_order.key-generator.column=id
spring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE# 指定product_order表的数据分布情况,配置数据节点,行表达式标识符使用 ${...} 或 $->{...},
# 但前者与 Spring 本身的文件占位符冲突,所以在 Spring 环境中建议使用 $->{...}
#spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds0.product_order_$->{0..1}
#spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds$->{0..1}.product_order_$->{0..1}
# 指定product_order表的分片策略,分片策略包括【分片键和分片算法】
#spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.sharding-column=id
#spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.algorithm-expression=product_order_$->{id % 2}# 指定product_order_item表的分片策略,分片策略包括【分片键和分片算法】
#spring.shardingsphere.sharding.tables.product_order_item.actual-data-nodes=ds$->{0..1}.product_order_item_$->{0..1}
#spring.shardingsphere.sharding.tables.product_order_item.table-strategy.inline.sharding-column=product_order_id
#spring.shardingsphere.sharding.tables.product_order_item.table-strategy.inline.algorithm-expression=product_order_item_$->{product_order_id % 2}#配置绑定表
#spring.shardingsphere.sharding.binding‐tables[0] = product_order,product_order_item#精准分片-水平分表
# 指定product_order表的数据分布情况,配置数据节点,Spring 环境中建议使用 $->{...}
spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds0.product_order_$->{0..1}#指定精准分片算法(水平分表)
spring.shardingsphere.sharding.tables.product_order.table-strategy.standard.sharding-column=id
spring.shardingsphere.sharding.tables.product_order.table-strategy.standard.precise-algorithm-class-name=com.dss.sharding.strategy.CustomTablePreciseShardingAlgorithm
2.4 测试
@Testpublic void testSaveProductOrder(){Random random = new Random();for(int i=0; i<20;i++){ProductOrderDO productOrderDO = new ProductOrderDO();productOrderDO.setCreateTime(new Date());productOrderDO.setNickname("PreciseShardingAlgorithm i="+i);productOrderDO.setOutTradeNo(UUID.randomUUID().toString().substring(0,32));productOrderDO.setPayAmount(100.00);productOrderDO.setState("PAY");productOrderDO.setUserId( Long.valueOf(random.nextInt(50)) );productOrderMapper.insert(productOrderDO);}}
http://www.hengruixuexiao.com/news/14989.html

相关文章:

  • 南京 web设计网站谷歌seo关键词优化
  • 深圳十大室内设计工作室seo网站排名优化公司哪家好
  • 阜宁做网站需要多少钱天津百度快速优化排名
  • 哪个做网站最有效的免费推广方法
  • 佛山定制网站建设成都网站推广经理
  • 上下滚屏网站模板爱站长尾词
  • 有人做网站吗游戏推广代理app
  • 网站建设 财务归类近期国内外重大新闻10条
  • 做网站用什么web服务器31省市新增疫情最新消息
  • php动态网站开发在线测试答案泰州百度公司代理商
  • 什么是三合一网站建设永久免费自动建站
  • 手机友好型网站百度怎么进入官方网站
  • 怎么能查到网站是哪家公司做的软文宣传
  • 网店美工设计模板东莞seo网站制作报价
  • 如何做网站代理今日武汉最新消息
  • 沈阳高端做网站建设下载一个百度导航
  • 做ppt的背景图片网站网络推广哪个好
  • 网站开发遵循网站权重怎么查
  • 东莞网站设计服务石家庄学院
  • 网页就是一个网站的首页近两年成功的网络营销案例
  • wordpress 学习插件关键词seo公司推荐
  • 响应式网站 html宽带营销策略
  • 简易制作网站定制网站开发
  • 3d网页游戏开服表关键词推广优化排名品牌
  • 怎么查网站备案信息成功的营销案例及分析
  • 哪个网站银锭专业做银锭的360网站安全检测
  • 网站建设费税收分类广州seo代理
  • 批量扫dedecms做的网站汕头seo排名收费
  • 温州网站建设wzwmwl信息流广告优化师培训
  • 微信外链网站3天引流800个人技巧