白话数据库与数据仓库的区别

来源:互联网 发布:网络棋牌游戏币怎么改 编辑:程序博客网 时间:2024/05/21 13:23

在论坛看到很多刚参加工作的朋友问这个问题,很是困惑,不要说没经验,就算是有经验的,应该也对这概念很模糊吧,除了一堆专业术语,还有近几年涌现出来的概念和产品,我想很多人是很困惑的。记录下自己作为非专业人士的一点感想和认知。

数据仓库到底是什么,总有个实物吧,接触了一段时间发现这实物就是数据库啊,所以又困惑了。因为我本人也是很讨厌专业术语,枯燥的理论这种东西,实在很虚,心里怎么都没有踏实感。我以我的经验,把我所理解的白话一下。

举个简单的例子,假设我们有一家小卖部,每天卖多少,营业额是多少,细心的老板可能还记个账,心里有个底,粗心的连帐都不记。那么这种规模,完全不需要什么数据库,数据仓库,每天大概挣多少,每年挣多少心里不是都清清楚楚的。随着生意好了,我们翻新成一家小超市,卖更多的产品,不用任何市场调研,用常识就能判断货品范围,卖几个月也能总结出进货量,出货量,这时候可能要请几个工人,账目就要记起来了,一家店的时候,我们用本子,或者电脑EXCEL记一下也是可以的,但扩张了几个连锁店后,如果你是老板,你也不放心每家店都靠这样记的吧,然后你就要考虑买POS机,每天的销售记录仔仔细细都在系统(数据库)里面存着,这就是业务处理数据库,如果这时候所发生的业务就几十万的量,放在一张hist表中,也许下一句复杂点的SQL也能做出一些简单条件的业绩报表,但是如果连锁超市往超级市场SUPERmart方向发展,那业务处理量大了之后,hist表大到不能直接在上面下复杂SQL了,下了之后超市实时的业务处理会受到影响,而且不能我每次需要这样的SUMMARY数据都用彪悍的方法来QUERY吧,并且,这时候我们对业绩分析的要求也提高了,就不仅仅局限于按照时间(天,周,月,季度,年度)或按照品种来进行统计,我可能要细分,比如老板要求你统计每个周六周日下午三点以后的刷卡的交易额,并且其中同一张单子中有购买两种以上类别(日用,食品,体育等)的单子情况,(这里我只是举例,这也涉及到商业智能了,这些分析可能可以给大老板的一些决策提供一些参考。但是不是所有老板都会有这方面的想法),但作为日常的分析,我们可能需要写一些额外的程序进行数据分析,并且把这些数据保存到另外一个业务分析数据库中。
至此,我想说明的是,数据仓库这个概念,跟我们一些企业日常在做的工作,整个界限是模糊的,你可以认为我们做的工作中,已经有部分工作在系统的进行数据处理的就是在做数据仓库,不一定是要使用什么级别的数据库,或者使用什么工具。
所以,现在我的超市规模大了,但是我也已经有了数据库,已经做了一部分有条理或没条理的数据整理工作,这种工作可能是老板要求,我们被动去做的,或者我们根据工作经验主动事先做好的。但现在大老板是一个有商业思想并且认可BI的理念的,即,他有很高的职位和权利,有号召能力,认可数据的重要性,认可数据分析带来的参考意义,愿意花钱去做。愿意花钱去做是最关键的,因为有些公司不大不小的尴尬境地导致很难判断做了不能确定是否可以带来明显的商业利益,那做了干嘛呢?不如不做。
如果真要做的话,以前做好的东西未必是会摈弃的,因为在做数据仓库前,最主要的是分析业务模型,需求,然后按照规则整理数据,可能以前有些模块已经做得很好就不需要更改了。做的内容主要就是把原来的整理好,没有做的模块做好,或者做一些更高层次的数据分析,总结一些有指导意义的KPI值,做一些辅助工具等等。
那么,作为学院派,选择了数据仓库到底要学习什么呢?
首先打好基础,11楼提到的模块中,ETL是很重要一部分,到底有多少层etl,要做多少数据抽取的工作,取决于需求和业务处理逻辑,一般1,2层,很复杂的来个3,5层不为过。ETL有很多工具,但说到底就是把数据抽取出来并整理好,比如从事务表中把一天的10多万笔记录统计成一条记录,以日期为主键记录到另一张以天为单位的SUMMARY表中,那么这个过程可以用工具来完成,也可以自己写程序来完成,存储过程,C,JAVA都可以,主要就是逻辑嘛。自己写的好处是知道原理。这里举个很简单的例子,有一次我需要用他部门的数据进行二次SUMMARY,定时任务常常跑不出来,记录是空的,但是我的程序LOG都正常,后来发现我使用的他部门的这张表是他们用工具从别处同步过来的,配置表数据量不大,每次全部更新是没问题的,在ORACLE 中也就几句话:
delete from table_name;
insert into table_name
select * from table_name@otherdb;
commit;
即便没有DBLINK,用其他方法也很简单,可偏偏他们使用的这个工具有点小问题,就是没有把delete和insert放在同一个transaction,导致更新时会出现很短暂的表为空的情况,在程序性能很差的时候放大为几秒钟,就这几秒钟的空档偶尔被我的程序踩中,所以我更新不到数据。搞笑的是对方的人员只会用工具,对这么简单的ORACLE常识都不了解,还口口声声说他们没问题,导致我不得不写个脚本监控抓他现行。
这个例子扯远了,我是在说基础知识的重要性,你学习java是好的,c也好,都不会荒废的。各种数据库,都玩玩,多写写。工具,了解就好,不要指望工具帮你解决所有问题。
元数据的管理涉及到数据库备份等问题,也是具体问题具体分析。
数据分析方面和行业都有关联,毕竟主要是业务逻辑的事儿。
数据展示倒是很重要的一块,分析了那么多,总要有展示的地方,就是报表,报表对有些行业很重要,实时性,准确性,稳定性各方面,但往往又受不到重视,因为地位上肯定远不及业务系统的可用性来的高,但花样很多,开发要求也越来越高,各种的bs的,CS的,二次开发的需求都有可能出来,谈不上有经验没经验,需求来了就得上,所以还是多学些技术比较靠谱。sap的bo,ibm的cognos,做的一般都巨贵,一般企业还是自己定制的比较多。
数据仓库更多的是概念,专业术语,去书城翻翻书看看,连买都不要买。有的企业数据分析也得涉及到unix,perl什么的,或者可能需要你了解甚至做部分的分布式业务系统的开发,就涉及更多了。所以,你的专业知识学了还是有用的,matlab学好了也是有好处的,比如金融分析师,MBA这类的,不是都用MATLAB嘛!技术的基础打打好,英语学学好,指不定将来进入哪个行业,用到哪些技能呢,学多了总是相通的。

原创粉丝点击