【clickhouse专栏】数据库、数据仓库之间的区别与联系
从本篇文章开始,笔者打算写一个系列的《clickhouse专栏》,其全称是Click Stream,Data WareHouse,简称ClickHouse。从其全称中的“Data WareHouse”,我们可以看出clickhouse的定位是数据仓库。那么“数据仓库”和“数据库”有什么区别呢?理解这点这很重要,理解了二者的区别,你就可以正确的将clickhouse用到其合适的应用场景。
一、OLTP与OLAP
在理解"数据仓库"与“数据库”的区别之前,我们需要先说明两个术语,即:OLTP与OLAP。
- OLTP(on-line transaction processing)联机事务处理:通常指的是面向传统应用服务的关系型数据库,用户通过web界面操作实时“增删改查”数据库里面的数据。包含核心的基本的事务处理逻辑,用户对于性能的要求很高,用户点击界面之后,响应时间最低要求在5秒之内(通常3秒以内),同时需要支持比较高的用户并发度。OLTP的数据操作通常面向的是1条或几条少量数据,比如:用户下单操作该用户的购物车、支付记录、积分记录等少量数据。
- OLAP(On-Line Analytical Processing)联机分析处理:面向的应用主要是执行复杂的数据分析操作,侧重于决策支撑,通过图形报表展现直观易动的数据分析结果。对于响应时间的要求相对宽松,数据分析过程通常不支持用户高并发,但数据分析的结果支持用户的高并发访问。OLAP面向的通常是批量数据操作,数据按批次进行导入、分析等操作,OLAP系统通常结合ETL(抽取(extract)、转换(transform)、加载(load))系统进行使用。
理解上面的两个数据,剩下的就简单多了,数据库通常面向OLTP操作,数据仓库通常面向OLAP操作。OLTP侧重于保存及变更数据的当前状态,而数据仓库侧重于保存数据的历史存档。比如:用户银行转账,OLTP数据库侧重于管理用户当前账户里的剩余金额,和转账过程对方账户金额入账的数据一致性;而OLAP数据仓库侧重于记录谁进行了转账、转了多少钱、钱转到了哪里。历史上该用户习惯在什么时间转账,月初还是月末?一个月转账几次?
二、数据仓库的特点
下面的是数据仓库的几个典型特点:
- 关注于记录数据变化的过程,而不是数据当前的状态。
- 读多写少
- 大宽表
- 数据批量操作,不更新或很少更新
- 不支持事务
有的工作经验相对少的朋友看了这几条会说:“这哪是什么特点,这都是缺点啊!” 。不更新或很少更新,读多写少都是场景限制,大宽表破坏数据库设计范式,不支持事务那还叫什么数据库?其实不然,在OLAP的场景下,这些恰恰是它为了保障数据分析的性能所进行特殊设计的特点。我给大家举几个例子:
- 比如:某云厂商按周期采集服务器的运行指标,比如:内存使用率、CPU使用率等等。这些指标都是批量采集、批量入库的,一旦入库就不会再去修改。通常也不会将内存指标建立一张表、CPU使用率建一张表,而是对于同一机房的服务器建一张表,这张表以时间维度包含各种指标。比如:查询内存使用率>80,CPU使用率>70的服务器的时候,就不会两表关联查询了,查询一张宽表就可以了,数据分析的性能飞跃式提升。不支持事务,通常OLAP系统不支持事务,因为事务会在一定程度上影响数据操作的性能。数据入库之后,需要针对这些指标不断地进行分析、挖掘,即:读多写少,基本上就批量写一次后续都是读数据操作。
- 又比如:股票实时交易数据,关注于记录数据变化的过程,而不是数据当前的状态。所有股票的所有历史数据一旦进入数据仓库之后,就不会发生修改。可以进行股票量化交易分析。
- 又比如:用户商品点击量数据、用户操作行为数据、用户网页浏览时长数据等等,这些数据都是对用户进行分析所需要的数据,一旦入库不会修改。可以进行用户买卖意愿行为分析。
其实还有很多这种类型的数据,这种数据的特点就是:数据量大、产生之后不会发生变化(那一个时间刻度的数据就不会发生变化)。因此,数据仓库通常面向的是吞吐量大的历史数据进行存档、不会在做更新删除操作的这种数据场景,数据存档之后通常只面向数据查询分析。
三、数据库与数据仓库结合使用
通常一个较大型的应用服务系统,既有数据库,也有数据仓库。数据库面向用户进行联机事务处理,处理用户界面的实时操作。数据仓库的数据面向决策管理层,提供数据及图形报表,提供变化多样的数据分析决策。

上图是一个典型的数据库与数据仓库同时存在的应用服务场景
- 互联网用户通过应用服务产生用户行为,对数据库进行OLTP操作
- 应用服务把用户的操作的行为发送给消息队列,消息队列将数据导入数据仓库
- 数据库的数据可以通过ETL抽取、处理、转换、整合到数据仓库
- 决策分析系统主要面向数据仓库进行数据分析,数据分析结果可以回馈到数据库,通过应用服务面向互联网用户提供数据分析结果查看能力
- 决策分析系统同时对应用服务的决策管理者,提供数据分析决策支撑能力
推荐阅读
限于博文篇幅,更多精彩内容我就不一一列举了,推荐阅读
《原创精品视频及配套文档:springboot-已录制97节(免费)》
等等等等
【clickhouse专栏】数据库、数据仓库之间的区别与联系的更多相关文章
- 【clickhouse专栏】clickhouse性能为何如此卓越
在<clickhouse专栏>上一篇文章中<数据库.数据仓库之间的区别与联系>,我们介绍了什么是数据库,什么是数据仓库,二者的区别联系.clickhouse的定位是" ...
- MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)
MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...
- Kettle学习系列之数据仓库、数据整合、ETL、ELT和EII之间的区别?
不多说,直接上干货! 在数据仓库领域里,的一个重要概念就是数据整合(data intergration).数据整合它就是把不同数据库中的数据整合到一起,对外提供统一的数据视图. 数据整合最典型的案例就 ...
- Oracle数据库名、实例名、数据库域名、全局数据库名、服务名之间的区别
数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数据库 ...
- 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别
简介 关系型数据库管理系统(RDBMS)是建立在关系模型基础上的数据库,主要代表有:Microsoft SQL Server,Oracle,MySQL(开源). 非关系型数据库(NoSQL),主要代表 ...
- UTF-8和GBK编码之间的区别(页面编码、数据库编码区别)以及在实际项目中的应用
第一节:UTF-8和GBK编码概述 UTF-8 (8-bit Unicode Transformation Format) 是一种针对Unicode的可变长度字符编码,又称万国码,它包含全世界所有国家 ...
- Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...
- 你真的会玩SQL吗?EXISTS和IN之间的区别
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...
随机推荐
- 用 JS(JavaScript )实现多选、全选、反选
JS小例题 学习内容: 需求 总结: 学习内容: 需求 用 JavaScript 实现全选.反选.多选 实现代码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- node的两种随起随用静态服务器搭建
一. anywhere Anywhere是一个随启随用的静态服务器,它可以随时随地将你的当前目录变成一个静态文件服务器的根目录. 1.确定电脑上安装了node.js 2.在当前所在项目文件夹下输入 ...
- 华为交换机Stelnet ssh/rsa验证模式下16进制公钥生成方法
1.生成秘钥 需要在你自己电脑上生成 执行下面命令,默认生成位置是~/.ssh ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注" 参 ...
- Makefile 简介
一.引例: #Makefile objects=test1.o test2.o main:$(objects) gcc -o main $(objects) clean: rm main $(obje ...
- 机器学习---kmeans聚类的python实现
""" Name: study_kmeans.py Author: KX-Lau Time: 2020/11/6 16:59 Desc: 实现kmeans聚类 " ...
- Spring Boot-@Value获取值和@ConfigurationProperties获取值的比较
@Value和@ConfigurationProperties都是用于属性的注入(相当于spring中<bean id=" " class=" "> ...
- 如何在 Java 中实现 Dijkstra 最短路算法
定义 最短路问题的定义为:设 \(G=(V,E)\) 为连通图,图中各边 \((v_i,v_j)\) 有权 \(l_{ij}\) (\(l_{ij}=\infty\) 表示 \(v_i,v_j\) 间 ...
- jsp中c:forEach使用
首先需要在jsp中引入<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ...
- 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)
目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...
- Spring按业务模块输出日志到不同的文件
一.背景 在我们开发的过程中,可能存在如下情况: 1.有些时候我们需要调用第三方的接口,一般情况下,调用接口,我们都会记录请求的入参和响应的.如果我们自己系统的日志和第三方的日志混合到一个日志文件中, ...