|
怎样的架构设计才是真正的数据仓库架构Innovate 不好意思,我有个事情没有澄清清楚,分表可以分为业务分表,和过渡分表。你说的那种情况基本属于过渡分表,目的就是为了分散ETL压力,而最后需要汇总成一个事实表。 对于过渡分表,很多国内公司使用tmp_xx,我觉得很遗憾,且不说感觉这是个临时表,就命名来说,项目里其他人可能不知道这个表是干嘛的。最主要的是,过渡分表并不是tmp的,应该属于项目的一个重要环节,它们在完成ETL使命后需要重新回到一起,最后到所谓的confirm fact table里面。 再说一下业务分表,所谓业务分表,并不是我们想怎么分就怎么分,而是根据实际情况。比如客户有固定的日、周、月、季、年等多个周期,那么周数据完全可以自己有一个事实表、年数据也可以。同样,举个简单例子,大客户的分析维和普通客户的维有很多不同之处,但是分析的指标却有很多共同点,而且如果调研结果是大客户信息全部来自大客户系统的话,难道你不觉得大客户和普通客户的事实表分开,是非常合理的么?领导最后可能需要一个总体客户的分析,这个时候你在完成所有ETL后,可以再汇总到一个confirm的聚集事实表里,这样既方便管理、效率高、数据质量有保障,而且方便安全管理,因为客户很可能不希望某些部门的员工不能看大客户的信息,大客户部门只能看大客户信息,而老总都能看。 至于confirm table的相关定义和资料,Kimball的Data warehouse life cycle toolkit里边就有。而且我以前在文章中也举个具体的例子,如何实现分表后又能高效聚集到confirm fact table中。 刚才我说到的这些设计细节,项目的Architecture或者consultant应该可以通过详细调研后预测这些问题,然后设计出架构来,然后data modeler根据相关架构设计去建模。而不是上面提到的,项目遇到困难了,于是需要修改相关设计,作出很多临时表来应付。作为设计者最好是很资深的人,或者有更资深的顾问帮助设计,不说预测好几年情况,能预测3-5年客户应该就很满足了,但是如果项目才开始实施几个月就发现不对,那预测了什么呢? Dumpedjoe 在项目(不仅仅是dw)中,架构设计师能够根据自身的技能和经验对于今后要面对的性能、数据质量、可扩展性等要求给出相应的应对方法是一个基本要求,问题是好的数据仓库架构是什么样的,针对不同的系统状况和业务需要,哪些是作为标准组件必需引入的,哪些是可以根据具体情况进行裁剪或合并的,我想这也是胡海飞希望大家能够深入探讨的,当然inmon和kimball以及其它各位老大早就给出了他们的答案,在这里我们对具体细节讨论一下,比如分表、confirm fact table、ods等等。 在这里说说我对ods的理解,和innovate511 略有不同,作为可选组件,ods是dw的一个补充,对于用户明确的查询和统计需求,为了减轻源系统的压力,引入ods,在其中针对确定的需求进行聚合,提供给前端操作型业务人员进行查询,dw在一定程度上能够满足这样的需求,但是分析型业务人员和操作性型业务人员的目的完全不同,虽然前者偶尔会访问到操作型人员经常访问的数据。 源系统 对于无批量查询需求的项目来说,ods就没有必要,也不能成为某一个层次,更不能承上启下。 至于分表命名为tmp_***,我认为只要它是在设计阶段就明确了应用在哪个方法上,它就没有问题,只能说命名方法不好,如果在设计阶段未定义,这样搞才是一个"修补型项目"。 对于dw项目,架构设计对于项目的影响相对其他项目来说要大一些,除了已经讨论的,大家是否有其他的应对,或者我们可以提炼一下,形成一个当前的最佳实践应用到后续项目中。即使没有结果也是很好的交流。 Innovate 首先,架构设计的重要性,是针对项目越庞大(包括数据量和业务复杂度),越是重要。举个很简单的例子,我做过得最小的项目,就是某地级市电信运营商的竞争对手分析,就那么一个主题,数据量也不大,需要啥架构呢?只要业务明确,你想咋做都可以,前端报表和OLAP都做得不错,客户就能满意。所以我前面的讲的假设,基本是大项目基础上。 那么我说的情况,都是客户有批量查询、随时对各个主题查询的可能。在大项目中,Operational Data Store,从定义来讲,结构还是OLTP,所以被认为“The ODS stage is sometimes skipped if it is a replication of the operational databases”,那么如果数据源很复杂,有多个数据源的话,将是必须的。 有一点我要说明的是,如果有的ODS层也有事实表什么的拿给前端查询,就和本身的定义不符,已经是DW的概念,作为前端应用,那是data mart的责任。所以我的建议是,不要把查询看作是独立的应用,也不要把ODS轻易忽略掉。 我刚才说的重点,并不是他命名,命名只是个表面现象,因为既然项目需要一个中间层来过渡,为啥设计的时候没有考虑到呢,非要临到应用才临时搞个临时表过渡? DW项目的项目质量保证还有个重点,就是开发和测试,我可以另外开一个话题讨论。至于也是至关重要的客户交流、调研,做个N多项目的人都有经验,我就不另外开话题了。 Dumpedjoe 主题少,数据量小,业务明确就不要架构我不能认同,好的架构是对后续会发生的常见问题有好的应对,难道等该项目结束后,客户觉得不错,再加个主题,数据量增长了以后我们再引入架构重新搞一次?这个暂且不谈,还是说说ODS,再次强调一下“明确”,如果查询需求明确,用data mart来应对不是好的方法,data mart对于查询应该是集中在分析型业务人员在分析之后,对于分析结果可能产生的查询要求,类似CIF中提到discover(是不是这角色不确定,呵呵),比如某人某天发现怎么某客户的贡献度比上月差很多啊,钻取到原子数据来看看,而ODS应对的是习惯性的查询要求,每天都要做,一做一大批,业务系统和dm能做啊,可是对于正常响应业务或分析操作就有影响。 我很认同查询不是独立的应用,在bi系统中,分析和查询的需求都会有,所以我们才不能一股脑将查询需求丢给dm,ods的必要性也在于此。而且在ods中围绕“明确”的需求在源业务表上作聚合没问题,什么都不干搞它做什么,与数据源的多少无关,它也不是事实表。 大家对海量数据的情况下,使用何种架构能够保证装载和转换的性能聊聊吧,:)。 Innovate511 楼上有没有想过,dm独立一个逻辑块出来,供前端查询?我前面提到过,DM可以是很丰富的一大块,既可以丰富DW的事实表,也可以丰富出来供前面所有应用使用,再复杂的应用,最好的办法就是分层或者分模块。目前我见过得项目中,这种方式应该是最好的,还有其他疑问么? 之所以最佳的办法是在DM这一层供客户查询,就是考虑到了客户复杂的,批量的查询需求。在ODS查询的话,客户需要一个复杂的查询,难道你需要关联好多大表,如果实在太难,你就对客户说,不好意思,逻辑太复杂,实现不了?客户肯定就会纳闷,既然你能实现复杂的报表和OLAP分析,为啥我复杂的查询不行呢? 还有,ODS层在绝大多数项目中,是供DW的数据源,不知道你把ODS作为查询数据源后,DW是否通过直接通过各个数据源直接装载呢,还是ODS也担当这个功能呢? 至于如何保证装载和转换的性能,在设计中,设计者总体思路是估量项目的数据量和业务量,然后就可以定论如何分层,分表如何分。kimball他们在书中只是写了大概要有staging area, conform层等,其实现实的大型项目中,还可以多加一些过渡层,以保证效率。因为不同项目选择ETL方式不同,有的选择使用工具,有的选择自己开发。如果自己开发的话,所有转换都在存储过程中进行,对于海量数据来说不是最好的办法,因为占用数据库的资源太大。建议把数据拿到c/java等程序里转换后,再load回去,减少数据库负担。这里说到了部分软件工程的问题了。 Dumpedjoe >目前我见过得项目中,这种方式应该是最好的,还有其他疑问么? >客户复杂的,批量的查询需求。在ODS查询的话,客户需要一个复杂的查询,难道你需要关联好多大表,如¬果实在太难,你就对客户说,不好意思,逻辑太复杂,实现不了? ODS层在绝大多数项目中,是供DW的数据源
CIF有专门的章节描述ODS,ODS有以下特点: 面向主题的 ODS是企业数据架构中最为复杂的一种形态,既要满足数据事务操作要求,又要满足数据分析要求,中国电信的CTG-MBOSS规划中对ODS有比较明确的要求,但在CTG-MBOSS规范中,ODS也做了一定的变更处理。在云南电信以及上海电信的ODS系统建设中(云南电信ODS已经初验,上海电信的ODS算是上线了),ODS的定位就比较模糊,其主要功能是给数据仓库提供数据,但大致来讲,ODS有以下四种类型: I类ODS,与应用系统的数据延迟为1~2秒,实时或近似实时 目前应用的比较多的是IV类ODS,因为一旦将决策分析结果加载到ODS中,重要决策信息的高性能联机支持将成为可能,举例如下: 客户细分与评价 ODS与数据仓库的重要区别如下: ODS只存储明细数据 在ODS中存在3种不同的时间窗处理: OLTP时间段,与应用系统保持同步更新(通常采用消息机制) 由于ODS需要满足上述不同处理类型的性能要求,导致ODS无法对任何一种类型进行优化,只能进行折衷考虑,这也正是ODS的技术复杂原因所在。 The frequency of _update and degree of integration of an ODS vary based on the specific requirements. Most commonly, an ODS is implemented to deliver operational reporting, especially when neither the legacy nor more modern on-line transaction processing (OLTP) systems provide adequate operational reports. These reports are characterized by a limited set of fixed queries that can be hard-wired in a reporting application. please reference page 41 for more detail information in <Dimension Modeling - the Data warehouse toolkit> by Ralph Kimball. Innovate 所以我对现在很多人对概念的操作深恶痛绝,搞了半天本质的东西还是没变。IV类ODS就是我说的那种形式的DM,非要说成ODS,从结构层次来说,它已经是面向最终客户应用,被最终ETL的,准备好的数据,在传统定义中,应该类似DM的作用。所以无论怎么定义,本质的东西要抓住。正如我说的,DW的数据源来自聚合业务系统数据的ODS,这个ODS的功能就是集合的、比较干净的OLTP系统,而后面有定义个IV类ODS,从架构层次来说,已经变了本质,是经过ETL的,符合客户查询需求的。两者一个在系统架构的前面,一个在系统架构的后面,为何要使用同一概念,标新立异?莫名其妙。 还有比较反感的定义就是什么实时数据仓库,无论你怎么设计数据仓库,始终脱离不了“历史的”特性,何来实时之说,蒙客户呢?现在客户懂得可比以前多了。 I do not have this DOC in my computer now, and it’d been written nearly 10 years, Kimball also said, Source systems are not queried in the broad and unexpected ways. Since DW has been developed over 20 years, concepts and methods have been prompted too, so for whatever DOC of whoever wrote, we need analyze first, which can solve our problem, which is the best method for our customer. Dumpedjoe 我认为把项目中成熟的东西用概念“封装”一下是走向成熟的标志,不是包装啊,个人观点,就好像kimball把dw分为四个component,几位老大都是做概念封装嘛,有能出书而且易懂顺便搞点小钱。 我想大家早就了解了概念的相对性,例如实时,现在的客户不好蒙哦,但是和他们说实时也不至于让他们如此狂躁,呵呵。 不说了,到此为止,言语如有不敬之处,innovate511休怪,非我本意,就技术问题讨论讨论而已。 刘庆 对于innovate提到的"第四类ODS就是之前提到的DM,并且是面向最终客户应用的"说法,在下不赞同。 Dumpedjoe 可以再探讨一下,第四类ods是比较实际的,对于国内的客户来说,因为种种原因,一般都不愿意将dm中的分析结果分享(比返回和回流应该要好理解些,但数据流向不直观,呵呵)给使用ods的操作型业务人员,从技术角度来说实现这一点并不难,主要是应用对象的不同导致了很少采用该方案,而在我经历的一些项目中,客户确实倾向采用该方案,因为组织架构的不同,对于客户信用度以及贡献度等等需要进行主题聚合或跨主题聚合的指标,能够提供给操作型业务人员作为客户评估的一个参照是很重要和必要的,这就类似于SE中的PDCA循环。 我想此方案应用的差异和组织结构密切相关,组织结构和该组织在业务领域的成熟度又有关系,这应该是当前国内应用较少的一个原因。 丁西宁 我还是老老实实的从41页开始重新看了一遍Kimball关于ODS的描述。看了三位关于ODS的讨论,我也结合自己的经验说两句。 我想在项目中我们进行架构设计时,一定会考虑这么几个问题: a 什么是ODS? b 针对现在的需求是否需要采用ODS? c 如果用,ODS将要在架构处于什么角色,要完成什么功能? 第一个问题,大家都已经很了解了,操作型数据存储区,是为了方便数据仓库而存在的。ODS既然是存在于OLTP和DW之间,那么在ODS中的数据就肯定与OLTP和DW的不同。在ODS中是保存一个月的数据,还是二个月、三个月?是只保存原子数据,还是进行一些聚合的处理?这些都应该和你想要ODS完成什么功能有关。 什么功能没有ODS就肯定实现不了?当然没有了!ODS只是为了方便DW的实现而存在的,方便ETL的实现,当然也可以让它实现一些数据的展现的功能了。innovate511肯定是从设计角度考虑,每一个层次都要有明确的功能,如果也让ODS来实现后台实现的数据展现功能,从设计上来看就显得混乱。对吧?并且对于ODS身兼ETL、展现、还要加上数据更新(ODS的特点)三职,是否可以很好处理多个数据源的转换、更新、是否保证数据展现的准确性、以及性能如何控制等方面考虑的。从技术这个角度看,ODS确实有些任务不明确,可能由此会导致数据在ODS层上如何存在的问题。作为DW的数据中转站,为了和多个数据源同步,它一定要保存最明细数据;如果要在ODS上实现数据展现(我想应该是从OLTP中分离出来的查询),那么为了性能一定要进行不同粒度的汇总,汇总的粒度应该也和数据仓库中的粒度不同。是有些乱!但是我倒是不反对这么设计。理由:我认为在ODS中实现的查询,很来应该是存在于OLTP中的,应该与在DM中的数据分析不同。因为这是从业务角度考虑的,在实际业务中,这部分业务需求是很频繁的(相对DM中的),所以把这些相对频繁、简单的查询从复杂的关联查询中分离出来也是一种设计方式。 对于第四类ODS,就是刘庆说的闭环管理需求的实现。但是我有一个不明白的。为什么DM中分析的结果要返回到ODS中呢?为什么不返回到OLTP中呢?我们决策出来的结果,应该是为了影响实际业务的流程的,而不是给ODS操作者看的。不知这样理解对不对? 说到实时数据仓库(准确的说应该是near realtime),我想应该也是从业务角度出发的一种设想。innovate511老兄肯定做过很多国外的项目,国外企业本身的管理水平应该比我们高。对于如何使用数据仓库、使用决策分析的结果、并且如何应用到企业日常的管理上应该都有很多的经验。我想还要请innovate511老兄多给我们讲一讲。near realtime data warehouse就是想把从历史数据中分析出来的结果与没有进入到数据仓库中的数据结合在一起使用,比如:在税务行业,每月企业报税就是集中在三、四天,在这几天中数据的变化会很剧烈,没准刚才还没有完成任务,下一分钟就完成。税务的领导就是想实时看这些数据。所以我们在给客户实现准实时数据仓库时,采用EAI和DW相结合的方式。 ODS正如几位所讨论的,在数据仓库架构中是非常重要的,我们这么花精力讨论是很值得的,也希望有更多的话题把我们聚到一起。:) Innovate511 首先我要说明的是,查询功能方面,OLTP系统架构没有经过DW汇总过后的conform table强,这是很显然的,客户的查询不会简单地按照OLTP系统的逻辑,一个一个得查询,可能是一个复杂的查询,这个时候OLTP要做的事情就是多表关联,而我们的汇总conform table是经过聚合的表,不需要关联就可以满足客户的各种复杂的查询需求。这是我不明白为啥要在ODS层做数据展现的原因之一。 其次,既然ODS是OLTP系统到DW之间的一个逻辑层,那就没有经过复杂的ETL,对不?举个很简单的例子,某大客户经理要查某区县欠费100元-200元之间的属于某大型单位的年龄在30岁以上客户详细资料已经最近的消费明细,那是否要在ODS中关联好几个表来达到他们频繁的查询目的呢? 我也做过很多国内项目,客户的有的及时性需求是存在的,但是不普遍,没有非要给出个新概念给客户感觉这个新概念肯定ok的必要吧,除非这些客户对数据仓库的了解都比较业余。所谓near realtime只是针对某个很棘手的分析主题,能快速相应客户信息的变化,这种情况一般为单一主题的情况,完全可以和“传统DW”分开来设计和实施(看具体情况,只是逻辑上至少要分开)。这样的需求一般数据量不会很大,这是能快速相应,接近事实的前提,技术和设计上没有什么需要革新。 无名 最近收到不少来自TTNN的关于数据仓库架构的邮件,本着“重在掺和”的原则,和“凑凑热闹”的目的,也来叨叨两句。不过由于不想引起争论,我说的内容和大家所谈的不完全是一码事,开始跑题...... 我以为,不同的软件系统有不同的架构描述方法,比如一个纯粹的系统集成项目(比如搭建一个各种硬件构成的网络)架构重点在于描述网络连接、硬件配置、功能原理和性能原理;而一个纯软件项目(比如开发一个基于Windows的视频播放软件)架构重点在于描述后台引擎的参数以及人机界面的设计原则。而一个数据仓库项目,系统架构和数据仓库模型的逻辑设计架构也不是一码事,大家讨论的应该是在数据仓库设计架构这个范畴,而这仅仅是系统架构中的一个组成部分而已,我现在想说的,是系统架构。 我想说的第一个问题,是架构的完整性,原因是所谓架构是对某个东西的完整的描述,通过看架构,能够知道这个东西是干什么用的,由什么东西构成,大致长什么样子。比如我们说一个建筑物的架构,先说这个楼是干什么用的,商用?还是住宅?还是商住两用?之所以要先说明这个,是别人能够有个大致的想象,同时能够根据这个来初步判断架构设计是否能够符合这个用途的要求。对于软件系统来说,说一个字处理软件或者一个播放软件或者一个ERP软件,大家先心里有个谱。就比如说数据仓库吧,大家至少都知道有个ETL、存储、展现等等。 再说一个建筑物,除了各层之外,还分功能区,比如住宅楼的楼梯、居室、卫生间、厨房等等;数据仓库中对系统每一层的区划也有不同,比如主题域划分、功能域划分等等。 Goldenfish 这样的说法很形象。数据仓库的架构由业务(业务需求)、功能(执行+运维)设计、数据(模型、存储、处理流程)设计、内外部接口设计等部分构成,数据仓库的管理流程(人员、角色职责、流程)融入其中,最后将人员、系统、信息、流程有机组织在一起,构成完整的数据仓库架构设计。 Innovate 首先要说明的是,现在的很多项目架构设计之所以包含了楼主说的那么多内容,而实际规范的项目不是这样的,而是架构设计、数据建模、业务分析、开发流程、测试流程应该是不同的人去完成各自的职责,也就是说架构设计的人可以不了解这个行业,数据建模的人可以不了解架构,业务分析可以不了解总体设计,开发、测试设计可以不了解其他设计,他们之间的联系就是已经成熟的接口而已。 几乎每一个国外的关于设计的资料都提到过这些。所以暂且不说这样做不行,只能说是中国特色吧,人力资源、客户投资、大环境决定的,不能说应该这样做。 架构的原理 刘庆 这两天关于架构设计的讨论挺激烈,"人到的不少,我很欣慰"。老高的提醒,自称跑题。回头看看,呵呵,讨论的历程有些意思。 责编:姜玲 微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友 著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。 |
热门博文 |
|