OLAP与数据仓库------《Designing Data-Intensive Applications》读书笔记4
由于第三章的内容比较多,这里我们拆分成两篇读书笔记来记录。上一章我们聊了聊如何数据库是如何实现存储和检索的,今天这篇我们继续来看看OLTP与OLAP存储引擎的区别与联系。
1.OLTP与OLAP
联机事务处理过程(On-Line Transaction Processing)也就是我们通常称之的OLTP。
联机分析处理过程(On-Line Analysis Processing)则被称为OLAP。
在文中,作者列出了两类处理过程的区别,我们来一一梳理一下:
- OLTP的应用通常读写较少的数据,处理的记录数目也较小。而OLAP的应用处理的数据量级通常是OLTP应用的数十,甚至数百倍。
- OLTP的应用通常直接面对应用程序,读写延迟容忍度低。而OLAP的应用通常作为内部数据分析,作为决策支持,读写延迟的容忍度相对较高。(所以OLAP应用通常是大数据分析的基石,笔者入职狼厂的部门,也主要从事OLAP系统Palo的开发工作)
- OLTP的应用通常读写的都是最新的数据。而OLAP的应用通常处理的都是海量的历史数据。
SQL语言它适用于OLTP类型的查询以及OLAP类型查询。但是将两者类型的应用混杂与同一个数据库,会大大提升DBA的运维难度,同时数据库也没办法因地制宜的更好来设计优化不同的应用。
OLTP系统通常解决的是应用程序高可用性和低延迟的读写请求,往往是业务运行的关键所在。DBA也并不愿意让数据分析师在OLTP数据库上运行特殊的解析查询,因为这些查询通常需要扫描数据集的大部分,这会损害并发执行事务的性能。 所以随着海量数据不断增长,越来越多的公司选择将OLAP应用运行在一个单独的数据库来分析。这个单独的数据库称为数据仓库。
2.数据仓库
数据仓库,是一个独立的数据库,主要负责分析查询数据,而不会影响OLTP操作。数据仓库中包含公司在各种OLTP系统的数据的只读副本。数据从OLTP数据库中提取(周期性的进行数据转储或持续不断的更新),将提取的数据的结构转为易于分析的结构,然后加载到数据仓库。这样过程称为提取–变换–加载(Extract-Transform-Load)

使用一个单独的数据仓库,而不是查询OLTP数据库直接分析。是因为数据仓库可以根据访问的特点优化查询。上一篇讨论的存储索引结构,通常都适用于OLTP数据库,但不适用于OLAP系统。接下来我们来看看适用于OLAP系统的存储索引结构。
3.面向列的存储
在典型的数据仓库中,表的结构通常非常宽。事实表通常有超过一百列,有时设置为几百列。而通常数据仓库的查询只访问一次4或5列的查询。
大多数的OLTP数据库,存储是面向行的:一行之中的所有值会连续存放。
但是,当一个OLAP的存储查询需要少数的列时(每行由100多个列组成),需要将数据从磁盘加载到内存中,并解析它们,并过滤掉那些不符合所需条件的列。这会造成很多不必要的查询消耗。
列存储
面向列存储的思想很简单:不要将所有值从一行存储在一起,而是将每个列中的所有值存储在一起。如果每个列都存储在一个单独的文件中,那么查询只需要读取和解析查询中使用的那些列,并且同样的列会更加易于压缩存储,这样就可以减少大量的工作。

列压缩
通常列中的数据会出现重复,这就大大适用于压缩策略。可以根据列中的数据,使用不同的压缩技术。位图编码是数据仓库中的十分有效的压缩技术:

列排序
在列存储中,存储行的顺序并不重要。最简单的就是将它们按照插入的顺序排序,因为插入一个新行只意味着追加到每个列文件中。但是,选择逻辑顺序,可以带来几点好处。
(1) 排序之后的列是有序的,更有利于定位查询数据。(如:按照时间排序,查询某个时间段内产生的数据)
(2) 它有助于压缩列。如果主排序列没有许多不同的值,那么在排序之后,它将有许多重复的序列。简单的编码压缩之后,就可以极大的降低存储开销。
注意,对每个列进行独立排序是没有意义的,因为我们将不再知道列中属于哪一行。可以新建一个索引来指向对应的行。有序又要求高效,所以排序列的存储通常都是通过上文提及的SSTable格式在内存之中灵活处理。
4.聚合:物化视图
数据仓库另一个常用的优化方式是:物化视图。如前所述,数据仓库查询通常涉及聚合函数,如SQL中的计数、总和、平均值、最小值或最大值。如果相同的聚合被许多不同的查询使用,那么每次都对原始数据进行处理是十分浪费的。为什么不缓存查询中经常使用的一些计数或总数呢?
在关系型的数据模型中,它通常被定义为标准(虚拟)视图:一个表一样的对象,其内容是一些查询的结果。虚拟视图只是编写查询的快捷方式。当您从虚拟视图中读取时,SQL引擎将它展开为视图的底层查询,然后处理展开的查询。而物化视图是将实际的查询结果写入磁盘,不需要额外的计算过程。但是当底层数据发生变化时,物化视图需要更新,因为它是一个非规范化的数据复制。(类似于触发器的工作原理)。所以物化视图是不常用于OLTP数据库,而在数据仓库进行ETL时进行更新。

物化视图的好处是:某些查询变得非常快因为他们已经被预先计算。
但物化视图的缺点是:查询原始数据的灵活性不足。 例如,没有办法计算哪种销售成本超过100美元的商品的比例。因此,大多数数据仓库尽量保留尽可能多的原始数据,并且只使用物化视图作为对某些常用查询的性能提升。
小结:
梳理了OLAP与数据仓库的联系,同时总结了几种在数据仓库种子常用的存储结构与对应的优化方式。接下来,我们进入下一章来看看编码在存储之中的意义。
OLAP与数据仓库------《Designing Data-Intensive Applications》读书笔记4的更多相关文章
- python for data analysis 2nd 读书笔记(一)
第一章相对简单,也么有什么需要记录的内容,主要用到的工具的简介及环境配置,粗略的过一下就行了.下面我们开始第二章的学习 CHAPTER 22.2Python Language Basics, IPyt ...
- 可靠的、可扩展的、可维护的数据系统 ------《Designing Data-Intensive Applications》读书笔记1
坦白说也是机缘巧合,在硕士生阶段进入分布式系统领域学习.无论是大规模存储或计算,其核心也是运用分布式技术利用并行性来解决数据密集型应用的需求.最近开始在啃这本<Designing Data-In ...
- 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6
进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...
- 【读书笔记-数据挖掘概念与技术】数据仓库与联机分析处理(OLAP)
之前看了认识数据以及数据的预处理,那么,处理之后的数据放在哪儿呢?就放在一个叫“数据仓库”的地方. 数据仓库的基本概念: 数据仓库的定义——面向主题的.集成的.时变的.非易失的 操作数据库系统VS数据 ...
- 数据模型与查询语言 ------《Designing Data-Intensive Applications》读书笔记2
数据模型是开发软件的最重要的部分,因为它们对应用程序有着深远的影响:不仅是软件的编写方式,而且也影响我们如何解决的问题的方式.第二篇读书笔记,我们聊一聊数据模型的设计. 1.数据模型的分层 作为一个开 ...
- 《数据仓库ETL工具箱》读书笔记
在本书中,你将学习到以下内容: 规划&设计你的ETL系统 从多种可能的架构中选出最合适的 对实施过程进行管理 管理日常的操作 为ETL过程建立开发/测试/生产环境 理解不同的后台数 ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
- 《Troubleshooting SQL Server》读书笔记-CPU使用率过高(下)
<Troubleshooting SQL Server>读书笔记-CPU使用率过高(下) 第三章 High CPU Utilization. CPU使用率过高的常见原因 查询优化器会尽量从 ...
- HTML5&CSS3读书笔记
Hi All, 分享一下我学HTML5 摘抄的读书笔记(我用的还是英文,因为一些新的东西还是来自于欧美国家,希望大家习惯于看一些英文材料): 1. Difference between Section ...
随机推荐
- JVM内存模型及垃圾回收的研究总结
Java内存模型 总的来说就分为两个区域,堆内存(Heap)和非堆内存(No-Heap),非堆内存又称为永久代(Permanent),永久的意思其实是针对于垃圾回收器来说的,表示这部分内容不需要回收. ...
- 【luogu2583】地铁间谍
https://www.luogu.org/problem/show?pid=2583 设在时刻i,车站j到结束最短需要等待f(i,j)分钟,得状态转移方程: f(i,j)=min{ f(i+ ...
- Android 跨进程启动Activity黑屏(白屏)的三种解决方案
原文链接:http://www.cnblogs.com/feidu/p/8057012.html 当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面 ...
- coursera普林斯顿算法课part1里Programming Assignment 2最后的extra challenge
先附上challenge要求: 博主最近在刷coursera普林斯顿大学算法课part1部分的作业,Programming Assignment2最后的这个extra challenge当初想了一段时 ...
- OBS源码解析(1)main函数
int main(int argc, char *argv[]){#ifndef _WIN32 signal(SIGPIPE, SIG_IGN);#endif #ifdef _WIN32 /*Open ...
- inotify软件部署及实时同步
声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/devel ...
- Android PopupWindows
今天了解到PopupWindows这个布局,PopupWindow这个类用来实现一个弹出框,能够使用随意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的. 以下是一个实例 xml ...
- OD调试程序经常使用断点大全
经常使用断点 拦截窗体: bp CreateWindow 创建窗体 bp CreateWindowEx(A) 创建窗体 bp ShowWindow 显示窗体 bp UpdateWindow ...
- Asp.net mvc 知多少(五)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- 六、Spring Boot Controller使用
在Controller中使用 @RestController 注解,该注解是spring 4.0引入的.查看源码可知其包含了 @Controller 和 @ResponseBody 注解.我们可以理解 ...