<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OLAP on NoneBack</title><link>https://noneback.github.io/zh/tags/olap/</link><description>Recent content in OLAP on NoneBack created by</description><generator>Hugo -- gohugo.io</generator><language>zh</language><copyright>@NoneBack All rights reserved</copyright><lastBuildDate>Wed, 10 Nov 2021 23:45:27 +0800</lastBuildDate><atom:link href="https://noneback.github.io/zh/tags/olap/index.xml" rel="self" type="application/rss+xml"/><item><title>Kylin概述</title><link>https://noneback.github.io/zh/blog/zh/kylin%E6%A6%82%E8%BF%B0/</link><pubDate>Wed, 10 Nov 2021 23:45:27 +0800</pubDate><guid>https://noneback.github.io/zh/blog/zh/kylin%E6%A6%82%E8%BF%B0/</guid><description>&lt;p&gt;之前就想着能做一个有意思的毕设，奈何周围都没有合适的老师。之前在学院启动选题之前找好了一个感觉不错的老师，但没想到最后把我鸽了。不过之前老师的方向也并不是那么感兴趣，于是也就作罢。 最近学院的毕设流程启动了，也在选题里看到了感兴趣的题目，于是便联系老师接了下来。&lt;/p&gt;
&lt;p&gt;我选的题目是 &lt;strong&gt;《基于差分隐私的数据库查询算法的设计与实现》&lt;/strong&gt;，方向是Differential Privacy + OLAP，具体一点就是为Kylin添加Differential Privacy的Feature。&lt;/p&gt;
&lt;p&gt;总的来说就是如此，至于细节，也许在之后的博客中会写到。这是此系列博客的第一篇。&lt;/p&gt;
&lt;h2 id="简介"&gt;简介&lt;/h2&gt;
&lt;p&gt;Kylin是一种分布式的OLAP数据仓库，基于Hbase和Parquet等列存数据库以及Hadoop和Spark等运算调度框架，支持超大规模数据的多维分析。&lt;/p&gt;
&lt;p&gt;它采用cube预计算的方法，把前台的实时查询变成了查询预计算结果，利用闲时的计算资源以及存储空间换取查询时间的优化，能极大的减少查询数据的时间。&lt;/p&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;在Kylin之前，一般使用Hadoop来对大规模数据进行批处理，并将结果存储在Hbase等列式存储中。其中OLAP相关的技术便是&lt;strong&gt;大数据并行处理&lt;/strong&gt;和&lt;strong&gt;列式存储&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;大规模并行处理&lt;/strong&gt;：实际上可以调用多台机其来并行处理计算任务，本质上是利用线性增长的计算资源来换取计算时间的线性下降。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;列式存储&lt;/strong&gt;：将记录按照列来存储。这方面主要是和OLAP的查询有关的，OLAP一般是对数据做统计等计算，一般都是同类型的列数据。列式存储使得查询时可以只访问需要的列并且可以充分利用顺序IO，提高性能。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上两个技术使得Hadoop等平台上对于大数据的SQL查询达到了分钟级。但实际上，分钟级别的SQL查询依旧没法满足交互式分析的需要，效率依旧低下。&lt;/p&gt;
&lt;p&gt;其中本质的原因在于，&lt;strong&gt;无论是并行计算或者是列式存储，都没有改变查询本身的时间复杂度，没有改变查询时间和数据量的线性增长关系&lt;/strong&gt;。于是只能通过增加计算资源和利用局部性原理来对查询进行优化，这两种方法在数据量不断增长的情况下，都能明显的预见其成本上和理论上的瓶颈。&lt;/p&gt;
&lt;p&gt;基于此，Kylin提出&lt;strong&gt;预计算策略&lt;/strong&gt;，通过对不同的维度进行预计算生成多维&lt;strong&gt;cube&lt;/strong&gt;(实际上就是一个数据表),后续的查询直接基于预计算的结果进行。经过预计算,物化视图的规模就只由维度的基数来决定,而不再随着数据量的增长呈线性增长。&lt;/p&gt;
&lt;p&gt;这个策略本质上是&lt;strong&gt;利用空闲的计算资源以及额外的存储资源来换取查询时的响应速度，改变了查询时间与数据量之间的正比关系，从而提高效率&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="核心概念"&gt;核心概念&lt;/h2&gt;
&lt;p&gt;Apache Kylin 的工作原理本质上是&lt;strong&gt;MOLAP(Multidimensional Online Analytical Processing)Cube,多维立方体分析技术&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="维度和度量"&gt;维度和度量&lt;/h3&gt;
&lt;p&gt;维度指用于审视，聚合数据的一种角度，一般是数据记录的某一个属性。度量是基于数据计算出来的具体数值。通过维度来聚合计算出度量值 $$D_1,D_2,D_3,&amp;hellip; =&amp;gt; S_1,S_2，&amp;hellip;$$&lt;/p&gt;
&lt;h3 id="cube理论"&gt;cube理论&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Data Cube，数据立方体&lt;/strong&gt;，其主要涉及构建和查询两种操作，构建时对原始数据建立多维度索引以及预计算，以加速查询。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cuboid&lt;/strong&gt;: 指在某一维度组合下所计算出的数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cube Segment&lt;/strong&gt;：Cube Segment是Cube的最小构建单位，一个Cube能被拆分为多个Cube Segment。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cube增量构建&lt;/strong&gt;：一般来说，增量构建Cube时是基于时间属性来触发的&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cube基数&lt;/strong&gt;：Cube中所有维度的基数可以体现Cube的复杂度。复杂度高,Cube膨胀的概率会变高（IO,存储放大）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="架构设计"&gt;架构设计&lt;/h2&gt;
&lt;p&gt;整个Kylin系统分为&lt;strong&gt;在线查询&lt;/strong&gt;和&lt;strong&gt;离线构建&lt;/strong&gt;两部分。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.loli.net/2021/11/10/AoxY4POJHdqLheb.png" alt="" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;离线构建&lt;/strong&gt;：主要有数据源，构建引擎，存储引擎三大抽象。从数据源拉取数据构建Cube在存储到列式存储引擎中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在线查询&lt;/strong&gt;：主要有接口层和查询引擎，对外部屏蔽Cube等底层概念。外部应用通过Rest API讲查询并转发给查询引擎，查询引擎查询与相关的数据返回结果。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;作为一个OLAP引擎，Kylin充分利用了&lt;strong&gt;并行计算，列式存储，预计算&lt;/strong&gt;等优化技术提高其在线查询和离线构建性能，故而有如下几个明显的优缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;: 标准SQL接口，查询速度快,可拓展架构，BI系统友好&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;缺点&lt;/strong&gt;:依赖的外部系统过多，运维困难；预计算与Cube构建导致的IO和存储放大；数据模型以及Cube基数的局限。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://tech.meituan.com/2020/11/19/apache-kylin-practice-in-meituan.html"&gt;美团 : Apache Kylin的实践与优化&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kylin.apache.org/cn/"&gt;Kylin官方文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kylin权威指南&lt;/p&gt;</description></item></channel></rss>