分布式中DBLE 是如何实现视图的-爱可生

浩鲸科技 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 是如何实现视图的-爱可生


总结

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


关于爱可生

爱可生成立于2003年,依托于融合、开放、创新的数据处理技术和服务能力,为大型行业用户的特定场景提供深度挖掘数据价值的解决方案。

公司持续积累的核心关键技术,覆盖到分布式数据库集群、云数据平台、数据库大体量运管平台、海量数据集成于存储、清洗与治理、人工智能分析挖掘、可视化展现、安全与隐私保护等多个领域。

公司已与多个行业内的专业公司建立了长期伙伴关系,不断促进新技术与行业知识相结合,为用户寻求新的数据驱动的价值增长点。公司已在金融、能源电力、广电、政府等行业取得了众多大型用户典型成功案例,获得了市场的认可和业务的持续增长。

分布式中DBLE 是如何实现视图的-爱可生


分享到:


相關文章: