Basic Concept

本节主要介绍Moonbox涉及到的一些基本概念,了解这些基本概念有助于理解Moonbox的设计思想和更好的使用Moonbox。

数据虚拟化

数据虚拟化,是指对于用户或用户程序而言,面对的是统一的交互方式和查询语言,而无需关注数据实际所在的物理库和方言及交互方式(异构系统/异构查询语言)的一种技术。用户的使用体验是面对一个单一数据库进行操作,但其实这是一个虚拟化的数据库,数据本身并不存放于虚拟数据库中。

Data Virtualization

(选自"Designing a Modern Data Warehouse + Data Lake" - Melissa Coates, Solution Architect, BlueGranite)

数据虚拟化软件通常需要具备以下几个能力:

Moonbox即定位于上图中的Data Virtualization Layer,并提供了如上所述的能力。让我们来了解一下Moonbox中与之相关的概念。

数据源

Moonbox将系统外部数据的来源统一视为数据源,数据源除了可以是hdfs这种纯存储系统,或者mysql、elasticsearch这种带计算能力的存储系统,还可以是presto等计算引擎。

数据映射

数据映射层实现虚拟表到数据源的映射,从而保证数据虚拟化平台向数据消费者交付正确的数据。同时,数据映射层也屏蔽了底层数据源的物理细节。

Data Mapping

Moonbox和数据库一样,提供两级命名空间,分别是数据库和表。虚拟库有两种组织方式:TYPE 1和TYPE 2。

View的概念类似于关系型数据库中的逻辑视图,从属于数据库,view基于虚拟表通过SQL定义创建,view也可以基于view创建出嵌套的view。

用户体系

Moonbox引入了Organization的概念,用于划分用户空间。Moonbox用户大致可以分为三类,分别是ROOT、管理员(Sa)和普通用户(User)。

User System

权限体系

除了通过用户属性来控制用户指令级别的权限外,Moonbox提供了对虚拟表的授权访问能力。

值得说明的是,Moonbox采用的方式是将库级、表级、列级授权关系分别存储在三张授权表中,且在查询确定用户授权关系的时候库级优先于表级查询,表级优先于列级查询。各个级别的授权关系是独立的,不同级别的授权关系不会跃迁。

分布式计算

Moonbox使用Spark作为分布式计算引擎,更多关于Spark的内容请参考Spark官网。

下推优化

SQL pushdown是数据虚拟化软件常用的查询优化手段,思路是将能显著减少结果集的算子下推到数据源执行,以减少从数据源拉取回数据虚拟化软件中的数据量。Spark SQL支持将Project和Filter算子下推到数据源执行,但是没有充分考虑数据源的特性,比如数据源本身具有计算能力,能支持更多的算子。Moonbox能根据数据源的特性,能将用户输入的一个大SQL进行拆分,使更多适合在数据源执行的算子下推到数据源执行。