从本篇文章开始,笔者打算写一个系列的《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专栏】数据库、数据仓库之间的区别与联系的更多相关文章

  1. 【clickhouse专栏】clickhouse性能为何如此卓越

    在<clickhouse专栏>上一篇文章中<数据库.数据仓库之间的区别与联系>,我们介绍了什么是数据库,什么是数据仓库,二者的区别联系.clickhouse的定位是" ...

  2. MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

    MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...

  3. Kettle学习系列之数据仓库、数据整合、ETL、ELT和EII之间的区别?

    不多说,直接上干货! 在数据仓库领域里,的一个重要概念就是数据整合(data intergration).数据整合它就是把不同数据库中的数据整合到一起,对外提供统一的数据视图. 数据整合最典型的案例就 ...

  4. Oracle数据库名、实例名、数据库域名、全局数据库名、服务名之间的区别

    数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数据库 ...

  5. 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别

    简介 关系型数据库管理系统(RDBMS)是建立在关系模型基础上的数据库,主要代表有:Microsoft SQL Server,Oracle,MySQL(开源). 非关系型数据库(NoSQL),主要代表 ...

  6. UTF-8和GBK编码之间的区别(页面编码、数据库编码区别)以及在实际项目中的应用

    第一节:UTF-8和GBK编码概述 UTF-8 (8-bit Unicode Transformation Format) 是一种针对Unicode的可变长度字符编码,又称万国码,它包含全世界所有国家 ...

  7. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?

    Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...

  8. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

随机推荐

  1. 给一个非矩形数组(Nonrectangular Arrays)

    Nonrectangular Arrays(非矩形数组)  public class Test {     public static void main(String[] args) {       ...

  2. 关于allegro找不到env文件解决方法

    使用allegro的友人时对于env文件并不陌生.在我们设计的过程中经常使用env文件设置快捷键从而达到快速拉线的目的.但是新安装的allegro软件中会找不到env文件,因为今天自己碰到了这件事,并 ...

  3. 关于iOS 二维数组,对象映射的问题

    数据格式如下: 遇到的问题是二维数组的 对象无法 通过 yymodel 直接实力话 ~~~ -"scoring_probability_distribution": [ -[ -{ ...

  4. Vue入坑日记: day - 01

    前言 最近做了一些小项目,小组里写前端的确实有点拉胯,于是自己动手写前端,因为大一学过web前端基础,所以对HTML,CSS还有印象,就直接对JS下手了,学了两天把JS大致搞明白了,顺便对JQuery ...

  5. Spring-注入方式(基于xml方式)

    1.基于xml方式创建对象 <!--配置User类对象的创建 --> <bean id="user" class="com.at.spring5.Use ...

  6. 使用 Jenkins 进行持续集成与发布流程图

    应用构建和发布流程说明: 用户向 Gitlab 提交代码,代码中必须包含 Dockerfile 将代码提交到远程仓库 用户在发布应用时需要填写 git 仓库地址和分支.服务类型.服务名称.资源数量.实 ...

  7. 安装 UE 源码版

    # 安装 UE 源码版 ## 下载安装包 > - 先去 Github 找 UE 官方开源的引擎组(这个需要申请加入) > - 加入后找到开源的源码版项目下载 zip 到本地 > - ...

  8. 正则表达式小技巧,sql中in的字符串处理

    工作中我经常写sql,当写带in的语句时,需要敲好多单引号,逗号,敲写起来容易易出错.因此,我写了一个小工具,处理这种繁琐工作.原理简单,利用正则表达式匹配.替换. 先看界面,一个html页面,包含三 ...

  9. GIL全局解释器锁、协程运用、IO模型

    GIL全局解释器锁 一.什么是GIL 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C是一套语言(语法)标准,但是可以用不 ...

  10. Azure Virtual Desktop(一)创建配置管理

    一,引言 Azure 虚拟创面是一项 Azure 服务,可以让我们管理: 1)VDI(虚拟桌面基础架构) 2)云端的 RDSH:RDSH 是 RDS(远程桌面服务)中的一个角色.这些类型的服务器用于托 ...