查看原文
其他

【干货】业界最强的SQL引擎Inceptor为何这么快?Holodesk CUBE实现灵活的秒级十亿条数据汇总查询

2016-01-19 星环科技

 

Figure 1 数据立方体


Data Cube(简称Cube),即数据立方体,用以表示具有多数列信息的数据集,如上图所示,Cube实际上是对抽象数据模型的空间式的解释,每个Cube都由维度(Dimension)和度量(Measure)两类集合构成。Cube中的每个单元内容对应着特定维度值下的度量值。


Cube用一种直观的方式展现了多维的数据集,使用户可以方便地从各个不同角度查看数据,各种cube操作则使用户可以灵活快速地对数据进行细分或者汇总,使数据可以更有效地为用户提供决策支撑。在OLAP中,聚合查询通过聚合函数通过来汇总(group by)来自多个行的信息。聚合函数非常常见,例如COUNT(计数)、AVG(平均数)、SUM(合计)等等,可见聚合查询的重要性。然而,聚合查询需要对全表进行扫描计算,所以速度非常慢。在Transwarp Data Hub平台上,我们则可以让Inceptor在建表阶段对Holodesk表建cube,收集聚合查询所需的信息,让查询时聚合速度大大提升。


我们用下面这张简单的表(连锁水果店的库存表)进行说明Inceptor为Holodesk表建cube的操作。“……”处为省略的表中数据,不影响理解。



Figure 2 水果店库存表

 

在建表时,如果我们执行指令为Time, Product和City列建Cube, 那么Inceptor会为这张表建一个抽象的数据立方,在其中记录下不同的(Time,  Product, City)数组所在的位置:

  


 

Figure 3 水果店库存表的cube


例如,在(2004,Apple,SH)的小方块中记录1,3,代表(Time, Product, City)=(2004, Apple,SH)的记录在第1.3行;在(2004, Orange, NJ)的小方块中记录2,4,5则代表Time, Product, City)=(2004, Orange, NJ) 的记录在第2,4,5行,以此类推。(这里对Figure 3做两点说明:1. Time为2005年和2006年的记录由于平面图像限制,在这里不做展示,在实际的数据立方中,Inceptor则会记录相应信息。2. 图中,我们在没有对应记录的小方块中标注了“NA”,而在实际操作中,Inceptor则不作任何记录。)拥有这样的信息后,Inceptor在对Time, Product, City列进行聚合时,无需再去扫描整张表,而是可以“按图索骥”,通过所建的cube,直接定位到需要聚合的数据,大大减少了查询耗时。同时,建高维cube是一举多得的——拥有高维的cube可以轻松地降维,比如在本例中,对(Time, Product, City)建好的cube可以用于加速对这三列中的任意一列或两列的聚合查询。


传统cube的核心思想是“预计算”——在建cube时就预先计算聚合函数值,这样在查询中可以直接获取现成的计算结果。这样的cube能够提升查询速度,但是缺乏灵活性,因为它只能提供指定维度上的指定聚合函数值,不仅对超出指定范围的聚合函数无能为力,还无法降维。Holodesk cube则采用了完全不同的策略,通过记录聚合维度的位置,可以为任意聚合函数加速,还可以轻松降维。


下面,我们进行一个简单的案例演示,看看对Holodesk表建cube后的性能提升。案例中,我们将用到TPC-DS中的store_sales表,表中有十四亿条左右的数据。我们将在以下情况下对store_sales执行一次对两个维度聚合的查询:


1. store_sales表为TXT表;

2. store_sales表为Holodesk表并建cube;

将要执行的SQL语句为:

SELECT COUNT(*) FROM store_sales GROUP BY ss_item_sk, ss_sold_date_sk;

 

1. Store_sales表为TXT表:


通过管理界面(如下图所示),我们看到对TXT格式的store_sales表的执行分为了两个阶段,总耗时为167秒左右。



 Figure 4 store_sales表为TXT表


2. Store_sales表为Holodesk表并建CUBE:


因为执行的SQL语句对ss_store_sk和ss_quantity两列进行聚合,所以我们在建表时对这两列建cube,建表语句如下:



这里 'holodesk.dimension' = ‘ss_store_sk, ss_quantity’指定了对ss_store_sk和ss_quantity建cube。建表完成后对store_sales_cube做查询。通过管理界面(如下图所示),我们看到对store_sales_cube表的执行耗时为11秒,查询性能相对TXT表提升了15倍。



Figure 5 Store_sales_cube表为建cube的holodesk表

 

在聚合查询中,对Holodesk表建cube能做到非常显著的性能提升。在聚合查询之外,对多表的关联查询(JOIN)是SQL查询中的另一大难点,由于涉及到多张表,处理的数据量和复杂度都大大提高了。下期,我们将介绍如何利用Holodesk表特性在多表关联查询中获得大幅性能提升。

 


回复 Holodesk介绍 查看【干货】业界最强的SQL引擎transwarp inceptor为什么这么快?秘密武器holodesk大揭秘

回复 银行 查看 银行案例集

回复 技术 查看 技术案例集

回复 电力 查看 电力案例集

回复 运营商 查看 运营商应用案例集

回复 产品 查看《星环 TDH 4.3 新概述》

回复 评测 查看《大数据产品最新测试基准看哪家(TPC-H or TPC-DS)?》

回复 投资 查看《时隔5个月,国内Hadoop厂商星环科技又获启明追投》

回复 简介 查看《星环信息科技(上海)有限公司--简介》

回复 交通 查看《Hadoop大数据技术助力山东交警实现智慧交通》

回复 快递 查看《星环Hadoop发行版助快递业迎战“双十一”》

回复 税务 查看《税务大数据应用案例》

回复 电商 查看《电商大数据应用案例》

回复 医疗 查看《医疗行业应用场景》

回复 金融 查看《金融行业的应用场景》

回复 TED视频 查看《TED精彩视频:【大数据 大趋势】》

回复 视频监控 查看《Hadoop大数据在实时视频监控的应用场景》


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存