这是傅一平的第326篇原创

作者:傅一平

个人微信:fuyipingmnb

“与数据同行”开通了微信群,已经汇聚了4000位小伙伴了,加我为微信好友(微信号:frank61822702)申请即可,我会拉你入群。

2004年笔者进入公司后就从事数据仓库的工作,伴随着中国移动经营分析系统的发展而成长,主导过多次数据仓库的重构建设,见证了数据仓库从ORACLE到DB2、从DB2到ASTER、从ASTER到一体机、从一体机到GBASE、从GBASE拓展到Hadoop、再从Hadoop演进到实时数据仓库的历程。

这其中不仅仅有技术和认知,也有自己的故事,但时间就像一个沙漏,会让存封的记忆变成没有记忆,在沙子漏光之前,笔者还是想努力做些回忆,将其中的片段串起来分享给大家。

一、2004年,Oracle的美好小时代

2004年毕业进公司的时候,那个时候还没有所谓的高大上的数据仓库,公司仅仅有个基于小机的Oracle报表数据库,主要服务于公司的报表和取数。由于CRM/BOSS等源端系统都是Oracle数据库,因此ETL是极其简单的,直接DBLINK。

DBLINK在那个时代真是太强大了,也真是太方便了。

每次公司业务增加了一个数据库,我们就会要求DBA给我们一个取数用的数据库账号,然后建个DBLINK就可以直接取数了(后来被禁止了,因为影响源端的稳定性),也可以在凌晨基于DBLINK抽取源端数据到报表库后再取数。

你会发现那个时代我们的取数脚本往往会出现数不清的@jf,@zw,@kf,jf是计费数据库的意思,zw是账务数据库的意思,kf是客服数据库的意思,看看下面这个配置脚本是不是很熟悉?

如果Oracle一统天下,ETL就失去了意义,数据湖这个概念都不好意思提出来,因为没有意义。Oracle DBLINK就是简约而不简单的代名词,其生命力之强大令人发指,这是真正的技术集约化提升生产力。

即使到今天,我们的数据集市还留有源端系统的DBLINK后门,因为数据获取快捷实时,可以小而美的解决一些问题,当然源端业务数据库变成了BC库或者容灾库,虽然DBLINK备受耦合的骂名。

那个时候还没有建模的概念,但公司的报表、取数前辈已经基于实践沉淀出了很多汇总表和宽表,当你的公司业务不够复杂、数据量还不够大的时候,谈关系建模,维度建模都没什么意义,前辈创建的中间表就是一切,只要能快速的满足报表取数需求。

有了DBLINK和宽表,那么Oracle时代最强大的Pass是什么呢?

当然是PL/SQL Developer这个集成开发工具,其是专门开发面向Oracle数据库的应用,PL/SQL叫做过程化SQL语言(Procedural Language/SQL),是Oracle数据库对SQL语句的扩展,其在普通SQL语句的使用上增加了编程语言的特点,比如把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。

直到今天我们的大数据开发管理平台的很多设计理念都是直接借鉴 PL/SQL Developer。每次我都会对DACP的产品经理说,学习下 PL/SQL Developer的功能和体验,直接抄也行啊,大多也源于我对PL/SQL Developer的感情吧,不过它的确太优秀了。

这里贴一段以前做ALL表时的SQL代码,各种decode,我的代码生涯至少做过3000个类似的脚本。

再贴一段以前的存储过程代码,也很方便。

即使是现在,只要企业的源端数据库没有去O,Oracle作为数据集市来讲也是非常合适的,况且Oracle的一体机一点不含糊,应对一般的报表取数绰绰有余。

二、2005年,DB2开启了数据仓库时代

在我进入公司的那一年,中国移动轰轰烈烈的经营分析系统1.0建设已经开始了,关于数据仓库采用Oracle还是DB2当时存在路线之争。

建议用Oracle其实是非常务实的,因为Oracle的生态非常好,大家也都用习惯了,当然相对保守一点。

建议用DB2的则认为从全球来看其在数据仓库领域占据领先位置(其实还有Teradata),而且Oralce毕竟不是为分析系统量身定做的,所谓OLTP和OLAP的区别。大家都会举一个例子,DB2的count统计非常快。

我当时看到DB2这么好的性能也挺惊讶的,觉得用DB2是正确的选择,但后来发现如果从使用的全流程体验来看,ORACLE性价比还是很高的,特别是当你的技术保障能力没跟上的话,DB2就是个坑。

但无论如何,我们还是踏上了与DB2相伴的10年,爱恨情仇。

公司的第一代数据仓库建设笔者赶上了末班车,数据仓库采用的是2台IBM P595+DB2软件,OLAP采用的是Hyperion Essbase(现在被Oracle收购了),BI报表是Brio,数据挖掘软件采用的是IBM Intelligence Minner8.1。

昂贵而牛逼的P595

1、数据仓库DB2

从实际使用情况看,如果说Oracle是个热情的小伙子,那么DB2肯定是个冷冰冰的小姑娘。

首先是性能,DB2跑汇总、关联分析的确快,但它的并发不行,因为资源独占太厉害,而且对错误的容忍度低,一不小心写错脚本就会跑挂机器,对于开发人员要求很高。

其次是ETL,自从引入了DB2,我们就开始体会ETL的繁琐和痛苦,源端的Oralce要转化成文本,再load进DB2,你得为他配备周边的工具,大多要量身定做。

再次是可用性,DB2的RAC其实没啥卵用,一个节点挂了切换到另外一个节点经常出现问题(记得不会自动切换),而且即使切换过去了性能下降起码一半,实用性差了。

但无论如何,DB2的确是很稳定的,几年都可以不出问题,但出了问题你就只能去烧香了。

从技术保障的角度来看,DB2 DBA属于稀缺人才,只能慢慢培养,有大问题就得从上海,广东调国内仅有的几个IBM db2专家过来解决问题,最怕的是他们也搞不定,只能层层打报告找美国实验室的专家来解决,协调成本很高,这个以后再讲。

最后是应用,DB2的技术特点决定了不大可能直接开放给一线人员使用,一来并发高了性能就大幅下降,二来代码要求太高,一不小心搞塌机器,这个谁也吃不消。

DB2也没有好用的开发管理工具,本身自带的就不说了,好不容易找到了一个叫Quest的第三方客户端工具,也是功能不全,然后我们重新开发了一个客户端。

用惯了Oracle SQL的人再转到DB2的一板一眼的SQL,那真是欲仙欲死,学习成本太高了,取数的效率直线下降,因此基于Oracle的数据集市就兴旺起来。

我们的数据仓库从一开始其实就处于DB2和ORACLE共存状态,核心仓库模型跑在DB2上,而大部分乱七八糟的应用数据全部跑在ORACLE上,所谓的数据集市,包括报表库、政企库、地市库、市场库等等。

DB2是娇贵的,Oralce是坚韧的。

2、BI工具Brio

我们长期使用Brio报表工具生成报表,围绕Brio做了大量定制化的服务。

以前Brio报表数据的刷新是定时的,定时在9点刷新,即使数据在6点生成好了也没用,有个合作伙伴的小伙子就把触发式的刷新功能做出来了,厉害得很,后来跳槽了,现在在腾讯做到很高的职位。

还有就是财务部门希望每月定时把一大批报表自动导成excel推送给他们,因为要的报表太多了,不希望登录到报表门户一张张点开处理,这个时候就要brio做批量生成excel的功能。

笔者以前在文章中说,BI近年来没多少长进,是指没有发生什么革命性的变化,诸如brio等早期的BI工具还有自身的特点,比如报表数据以bqy的文件方式存储,你可以随意下载和拷贝,不需要登录什么服务,在任何一台有brio客户端的电脑都能打开,然后做各种线下的拖拉钻取报表操作。

我们也引入过BO等水晶报表工具,由于不习惯放弃了,最后连Brio也不用了,完全自己定制开发,原因以后再说。

3、OLAP工具Hyperion Essbase

虽然那个时候企业购买了Hyperion Essbase,但对于Essbase的评价就是一句话:曲高和寡,主要体现在二个方面:

第一,多维分析不是企业使用的主要场景,有限维度的报表才是刚需,那个时候企业真正使用OLAP的人员不超过5个,这样引入的OLAP的性价比就很低了。

第二,OLAP的确会快很多,但OLAP发布和维护的工作量有点大,比如在发布前,要有专门人员去设计CUBE打CUBE,如果增加了新维度还要重新打过,比较繁琐。

OLAP在当时属于那种叫的很响亮,但实际用得不咋滴的先锋产品,生不逢时吧。

4、清晰的三层体系架构

第一代的数据仓库体系架构如下图所示,分为数据获取层、存储层和访问层

数据获取层:将BOSS、MIS等外部数据源的数据进行清洗、转换和加载到数据仓库,关于ETL也有路线之争,其实我们真正做的是ELT,复杂的转换全部是在库内完成的。而且我们的ETL还有一个后门,就是数据集市Oracle直接通过DBLINK获取源端数据,隐患还是挺大的。

数据存储层:实现对数据仓库中数据和元数据的集中管理,即DB2,并根据需要建立面向部门的数据集市(老的报表库退化为数据集市),数据集市和元数据这么早提出来也是非常有先见之明的,当然也只是提出而已,并没有完全落地。

数据访问层:通过多样化的前端展现工具,实现数据的分析,形成市场经营和决策工作所需要的业务信息和知识,采用的就是前面所说的Brio工具。

5、业务为王的九大主题

数据仓库的第一个特点是面向主题(Subject Oriented),中国移动经营分析系统业务规范1.0版本开篇所说的话很好的诠释了对主题的理解:

“为适应日趋激烈的市场竞争环境,提升中国移动的企业核心竞争力,应充分利用业务支撑系统产生的大量宝贵的数据资源,建立移动经营分析系统,实现对信息的智能化加工和处理,为市场经营工作提供及时、准确、科学的决策依据”

“本业务规范包含对中国移动经营分析系统过的总体说明、基本层次结构、系统功能、专题分析、系统管理、外部系统的接口、指标要求等方面的内容,从功能上涵盖了客户发展分析、业务发展分析、收益情况分析、市场竞争分析、服务质量分析、营销管理分析、大客户分析、新业务及数据业务发展分析、合作服务分析九大主题”

这九大主题对于移动业务的抽象和概括是相当的全面和精准,非常具有前瞻性,后面所有的领域模型、逻辑模型、物理模型都是围绕这九大主题展开的。

关于模型设计自己没机会参与,因为刚进公司,啥都不懂,记得参加过几次项目例会(亚信是当时的集成商),印象最深的就是亚信北京研发的数据模型专家在那边讨论模型的设计方案,还有跟局方的争论,一些新的名词不停的跳出来,什么erwin、概念模型、逻辑模型、物理模型、ER图,PDM等等,自己一头雾水。

下图是中国移动业务的概念模型。

下图是其中的事件主题的逻辑模型。

第一代数据仓库的建设持续了一年多,其实跟我没多大关系,只有使用上的一些体会,九大主题建设完成后最大的感受是可以用BI工具看报表了,但九大主题使用的人并不是很多。

现在很容易想明白原因,因为第一代数据仓库基本还是技术驱动,虽然经营分析系统规范有集团公司的顶层业务规划,但到了省公司业务人员参与度就低了,规范如何跟本地业务相结合一直是数据仓库的巨大挑战。

但无论如何,2005年是值得庆祝的一年,因为我们的数据仓库起航了,从0到1总是有很大的意义。

未完待续。

作者:傅一平 (微信号:frank61822702)

猜你想看更多????

业务为王,这两年我们采用的那些数据产品和技术引擎

大数据架构如何做到流批一体?

美团点评基于 Flink 的实时数仓平台实践

“做好大数据测试,我是认真的!”

辨析BI、数据仓库、数据湖和数据中台内涵及差异点(建议收藏)

一文读懂非关系型数据库(NoSQL)

如何深入浅出的理解数据仓库建模?

拥有敏捷数据交付平台(DataMaster)是怎样一种体验?

痛苦与变革,如何避免大数据PaaS平台建设中的这些“坑”?

中国电信的“天翼大数据飞龙平台”长啥样?

如何打造敏捷的数据挖掘能力?

论道数据仓库维度建模和关系建模

解读云栖大会的《阿里巴巴数据服务产品开发及大数据体系》

阿里云机器学习平台的思考

一个传统企业大数据发展的编年史

一个业务化的大数据PaaS平台启示录

为什么选择这样的大数据平台架构?

我们需要什么样的ETL?

重新认识数据可视化

一只传统企业大数据平台团队的绽放!

看上去很美, 谈谈阿里云的大数据平台「数加」

浙江移动大数据平台践行之路(上)

浙江移动大数据平台践行之路(下)

要看更多,请点击左下角阅读原文即可阅读整理好的所有文章!

相伴十六载,讲讲我和数据仓库的故事(一)相关推荐

  1. 三十而立再出发 六十六载谱芳华 | 吉林大学举行交通学院成立30周年暨交通学科创建66周年庆祝大会...

    来源:吉林大学 三十周年栉风沐雨,同甘共苦:花甲六载春华秋实,铸就辉煌.11月19日上午,吉林大学交通学院成立30周年暨交通学科创建66周年庆祝大会在南岭校区体育馆举行.上午9时30分,庆祝大会在国歌 ...

  2. 【SQL开发实战技巧】系列(十六):数据仓库中时间类型操作(初级)日、月、年、时、分、秒之差及时间间隔计算

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  3. FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList

    贪婪加载顾名思议就是把所有要加载的东西一次性读取. 本节内容为了配合[延时加载]而诞生,贪婪加载和他本该在一起介绍,开发项目的过程中应该双管齐下,才能写出高质量的程序. Dto 映射查询 Select ...

  4. NGS接龙丨中科院北京基因组所胡松年:测序相伴二十六年,解读“添麻烦”的NGS...

    生物信息学习的正确姿势 NGS系列文章包括NGS基础.高颜值在线绘图和分析.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流 ...

  5. 章节十六:复习与反爬虫

    章节十六:复习与反爬虫 目录 章节十六:复习与反爬虫 1. 爬虫总复习 1.1 工具 1.2 解析与提取(一) 1.3 解析与提取(二) 1.4 更厉害的请求 1.5 存储 1.6 更多的爬虫 1.7 ...

  6. 第十六讲:完美主义身心健康 第十七讲:身心健康:运动与冥想 第十八讲:睡眠,触摸和爱情的重要性

    (注:此为课程第十六课,更新于2017年6月29日) 早上好! 我们今天要把完美主义讲完,然后开始讲精神肉体(Mind and Body).这个学期对我来说挺不错的,基本上没有什么东西让我后悔做过.不 ...

  7. 【正点原子STM32连载】第四十六章 FATFS实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  8. 【Visual C++】游戏开发笔记三十六 浅墨DirectX提高班之四 顶点缓存的逆袭

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8276363 作者:毛星云(浅墨 ...

  9. SpringBoot | 第二十六章:邮件发送

    2019独角兽企业重金招聘Python工程师标准>>> 前言 讲解了日志相关的知识点后.今天来点相对简单的,一般上,我们在开发一些注册功能.发送验证码或者订单服务时,都会通过短信或者 ...

最新文章

  1. 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
  2. 标准差、协方差、相关性分别是什么?
  3. 说一说MVC的CSRF(三)
  4. 使用tab键分割的文章能快速转换成表格。( )_word排版技巧:活用Enter键提高工作效率...
  5. g11 android 4.4,HTC G11 Incredible S 稳定流畅Android4.0.4华丽体验Sense4.1 省电耐用
  6. 永远的GetLong
  7. 微软RPA工具Power Automate Desktop
  8. 【Linux系统编程学习】 GCC编译器
  9. 苹果重奖库克,挽留其留任到2025年,网友:雷军又没机会了
  10. 蓝桥杯 ALGO-84 算法训练 大小写转换
  11. Oracle数据泵对已经存在的表加载索引
  12. python PDF文件转JPG
  13. ps更换底色2019版本以上
  14. __ratelimit: XXX callbacks suppressed
  15. 检测按键正确的小游戏
  16. Delaunay 三角剖分2D(原理 + 源码)
  17. 计算机网络ppp,计算机网络 第7章 PPP和Internet接入.ppt
  18. python opencv-11图像像素归一化
  19. 〖Python语法进阶篇⑱〗- 综合实战 - 抽奖系统之admin模块 - 抽奖系统之admin模块 - 实现对奖品的增删改操作
  20. 计算机软件著作权的权利归属如何确定

热门文章

  1. 如何把C盘里的文件默认位置更改到D盘指定目录?
  2. 详解Linux终端下编写“贪吃蛇”游戏
  3. Iterator 的用法
  4. 2、软件造价总结(主要基准数据)
  5. 甘超波:NLP检定语言模式
  6. 锐龙r75800h和酷睿i511400h差距多大 r7 5800h和i5 11400h核显
  7. Linux/C++项目结构与编译
  8. openjudge白细胞计数
  9. C语言零基础——简单算术刷题系统
  10. 三极管为什么可以放大电流?