首页 > 其他分享 >分布式 | DBLE 是如何实现视图的?

分布式 | DBLE 是如何实现视图的?

时间:2022-12-20 15:01:00浏览次数:31  
标签:SQL 下推 视图 算法 DBLE MySQL 分布式


作者:苏仕祥

浩鲸科技 PaaS 组件团队成员,长期从事分库分表中间件的相关解决方案工作,热爱技术,乐于分享。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


本文主要讲解 DBLE 是如何实现 MySQL 视图功能的,内容包括 MySQL 视图相关概念、MySQL 对视图的实现,以及 DBLE 对视图的实现。

 

一、MySQL 视图概念及 MySQL 中视图的实现

MySQL 5.0 版本开始引入视图。视图本身是一个虚拟表,不存放任何数据。在使用 SQL 语句访问视图的时候,它返回的数据是 MySQL 从其他表中生成的。

MySQL 中对于视图是如何实现的呢?

MySQL 中通过两种算法来实现视图功能,分别称为合并算法(MERGE)临时表算法(TEMPTABLE)

如下图所示(图片出自《高性能 MySQL》):

分布式 | DBLE 是如何实现视图的?_数据

合并算法就是将视图 SQL 和查询 SQL 合并,然后执行查询,可以看到如果我们通过视图来简化 SQL,其实在 MySQL 底层又给我们转换了过来。

临时表算法就是在执行查询的时候,定义的视图会先生成对应的临时表,然后服务器基于该临时表执行相应的查询。

那么 MySQL 究竟会使用哪种算法呢?

如果在创建视图的时没有显示指定算法,MySQL 会尽可能的使用合并算法。如果视图中包含 GROUP BY、DISTINCT、任何聚合函数、UNION、子查询等,只要无法在原表记录和视图记录中建立一一映射的场景中,MySQL 都会使用临时表算法来实现视图(当然这些规则可能随着 MySQL 的版本更新发生变化)。想要确定 MySQL 究竟使用何种算法,可以 EXPLAIN 一条针对视图的简单查询,如果 ​​select_type为"DERIVED"​​,则为临时表算法。

 

二、DBEL 对视图的实现

DBLE 对视图的实现主要分为两种情况,一种是可下推,另一种为不可下推

  • 可下推:DBLE 直接将视图相关 SQL 下推到后端 MySQL 执行,DBLE 端只保存视图相应元数据信息。
  • 不可下推:DBLE 会在逻辑层面实现视图,然后当执行视图相应查询 SQL 的时候,在将相应查询 SQL 与视图 SQL 合并后执行,这里就相当于 MySQL 中的合并算法了。

那么可下推或不可下推的情况是如何判断的呢?

通过判断相应的逻辑 schema 是不是 nosharding(nosharding 表示 schema 中没有表配置)。如果是 nosharding 则可下推,否则不可下推。其实这里可以看出来,可下推的情况可能比较少出现。

DBLE 对视图的实现详情如下图所示:

 

分布式 | DBLE 是如何实现视图的?_MySQL_02

 

总结

本文主要讲解了 DBLE 是如何实现 MySQL 视图的,内容包括 MySQL 视图相关概念、MySQL 对视图的实现,以及 DBLE 对视图的实现,希望对大家理解 DBLE 的视图实现有所帮助。

标签:SQL,下推,视图,算法,DBLE,MySQL,分布式
From: https://blog.51cto.com/u_15077536/5955428

相关文章

  • 分布式id的方案
    1简介在分布式系统架构中,通常会涉及到分布式全局唯一ID的生成在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在金融、电商、支付、等产品......
  • docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例
    在上一篇,学会了3主3从的Redis集群搭建。那么接下来,我们就来学习Redis集群主从容错切换迁移案例本次案例从模拟两个场景1:数据读写存储a:一个新key数据来了,是否会按照预设......
  • MAUI新生4.1-控件视图:控件总览(未完待续)
    根据控件的功能特点,以及个人的习惯,我将MAUI的控件划分为以下几个大类:Page页面类Layout布局类Content单一内容类Collection集合内容类Form表单类Shape形状类辅助功......
  • 北汇信息与臻融科技达成战略合作,共同推进分布式通信技术在汽车领域的应用
      南京臻融科技有限公司(简称瑧融科技)是从事中间件研发的创新型国家高新技术企业,拥有多项具有完全自主知识产权的核心技术和中间件产品,在网络化计算、中间件平台、云边......
  • 分布式计算框架Gearman原理详解
     什么是Gearman?Gearman提供了一个通用的应用程序框架,用于将工作转移到更适合于工作的其他机器或流程。它允许你并行工作,负载平衡处理,并在语言间调用函数。它可用于从高可用......
  • 利用log4j+mongodb实现分布式系统中日志统
    背景   在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出。为了方便对这些日志进行统一管理和分析。我们可以将......
  • 细说集中式与分布式版本控制系统
    前言:分布式版本控制系统除了Git以及促使Git诞生的BitKeeper外,还有类似Git的Mercurial和Bazaar等。这些分布式版本控制系统各有特点,但最快、最简单也最流行的依然是Git!集中式......
  • Kubernetes分布式架构分析
     一个Kubernetes平台可以管理几百台容器主机,以及运行在这些主机上的容器应用。如果容器主机采用裸金属服务器,则一台容器主机上运行的容器应用可以超过200个。也就是说,一......
  • 分布式ID生成方案
    分布式ID生成方案朱门酒肉臭,路有冻死骨。简介对于单体项目,主键ID常用主键自动的方式进行设置。但是在分布式系统中,分库分表之后就不行了,如果还采用简单数......
  • 基于消息队列实现分布式事务
    注意:本文把消息队列与购物车系统看作同一个事务目标:掌握消息队列的事务场景:订单系统产生订单,购物车系统减购物车中的商品。实现思路:订单系统在消息队列上开启一个事务......