从本篇文章开始,笔者打算写一个系列的《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. 【Android开发】LogcatView,手机中查看logcat神器

    先上图 集成: 1, allprojects { repositories { ... maven { url 'https://www.jitpack.io' } } } 2, dependenci ...

  2. mixin和composition api

    1. 这两个都是实现组件逻辑复用的法宝 2. composition api是vue3的,  composition api的出现就是解决mixins的不足之处的 一. mixin 回顾下mixin, ...

  3. 手动封装一个node命令集工具

    了解NPM安装模块时与项目配置文件中的bin配置发生了什么 了解nodejs在控制台中的运行环境及上下文 基于自定义命令集工具集成Yeoman 一.NPM模块安装内幕与nodejs控制台运行环境 1. ...

  4. Mybatis-自定义类型处理器

    类型转换器:mybatis中有一些常用的类型转换器,比如把Java中的short类型转换为mysql中的short类型:但是如果现在是Java中的Date类型,但是我想要存储到数据库中转换为Long类 ...

  5. springdata jpa多表查询的方式

    方式一:使用@Query注解方式查询主要有JPQL方式,也就是面向对象的方式,这种情况下查表其实查的是对象,字段是实体中的属性,该方式可以直接映射到实体,如下图. 使用jpql的方式模糊查询时候不能使 ...

  6. Cocos Creator绕远做圆周运动,且变换运动物体的角度

    需求:绕远做圆周运动 并且精灵的角度要随着位置的改变而改变 网上有很多做圆周运动的代码,但是要不然就是角度不变 要不然就是cocos版本老旧 摘了一段3.x的圆周运动,自己加了角度变换 圆周运动,已知 ...

  7. 使用etcd选举sdk实践master/slave故障转移

    本次将记录[利用etcd选主sdk实践master/slave高可用], 并利用etcdctl原生脚本验证选主sdk的工作原理. master/slave高可用集群 本文目标 在异地多机房部署节点,s ...

  8. Linux下安装并使用jumpserver跳板机

    堡垒机介绍: 官方网站:https://www.jumpserver.org/ 在一个特定网络环境下,为了保障网络和数据不受外界入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系 ...

  9. web服务报错类型

    401:无权限(HttpStatus.UNAUTHORIZED) 404:页面找不到 405:不支持get/post请求,如只支持get请求但传了post请求 400:请求格式错误,如不为null但传 ...

  10. XCTF练习题---MISC---hit-the-core

    XCTF练习题---MISC---hit-the-core flag:ALEXCTF{K33P_7H3_g00D_w0rk_up} 解题步骤: 1.观察题目,下载附件,发现是一个.core文件 2.打 ...