宽表的思考

本文探讨了宽表在CRM系统中的应用,详细分析了其带来的一览全貌、查询速度提升等优点,同时也揭示了在ETL过程中遇到的脚本维护困难和字段增删复杂等问题。文章提出了一套宽表使用原则,旨在帮助开发者优雅地利用宽表,并提供了在不同场景下选择宽表或窄表的指导。
摘要由CSDN通过智能技术生成


一 宽表的优点

1.      宽表浅意上的好处

在当前这个项目中,大量使用了宽表,字段超过一百五十个字段的宽表有五张,分别是客户机构级信息表、客户客户经理级信息表、客户经理信息表、集团客户信息表、战略客户信息表。

从上面的表名中可以猜到,这是个CRM项目,我这里能列举出来的优点也是在项目中体现出来的优点。

大量使用宽表究竟给我们带来了什么好处?


  •  窥一表知全貌
  •  查询速度快(此处我一直保留疑问)


窥一表知全貌:这个好处很明显,尤其是收到报表开发人员的欢迎,他们不关心数据如何存储,只关心这张报表是不是很方便,很快的能开发出来。还有一个就是数据分析人员,银行业大部分数据分析人员很讨厌做表关联,他们喜欢一条记录看到客户的全貌。

查询速度快:大多数情况确实如此,大部分SQL慢都是由于表关联造成的,所以大家都在思考不关联出结果。于是,出现了将一些常用的信息都做成了大宽表,此处让我这种范式强迫症患者很是头疼……

二 宽表的不便

从一个ETL人员角度讲,使用宽表带给我的痛苦远远大于它带给我的快乐,此处描述一下我们目前面对的系统,从系统出发解释宽表带来的问题。

项目是一个CRM系统,以仓库数据(TD)为基础,进行建模、数据加工,作为仓库的一个集市落地后,在将这部分数据,同步到查询服务器(DB2)上,每日从TD到DB2的数据量约为16G,同步数据的方式为TD导出数据生成txt,上传到FTP服务器后在通过SHELL加载到DB2。

了解了项目的背景,就可以列举出在使用宽表时有如下不便

  •  脚本过长,不易维护
  • 字段的增删过于复杂



因为要在两个系统中同步两张表一份数据,增删字段时一定要考虑一致性,同时要考虑历史数据如何处理。每次都需要经过如下步骤:

1.        修改TD表结构

2.        修改TD脚本

3.        修改导出数据脚本

4.        修改DB2表结构

5.        修改DB2加载数据的Shell脚本

每次变动都伴随这大量的工作,同时还需要因为这个字段加载新的历史数据或更新这个字段的内容,此处在项目后期维护中带来了很大的工作量。

三 如何优雅的使用宽表

宽表在仓库的汇总层大量使用,如客户、存款、贷款等通用的实体都被设计为宽表。这些宽表会面临我上面提到的问题吗?

显然不会,仓库的表很少因为个人需求而增减字段,同时仓库大多只负责原始数据的存储,不会涉及到太复杂的字段加工逻辑,故大多数汇总层的表都被设计为宽表。

要想优雅的使用宽表,我认为需要注意以下这一点:

字段是否会频繁增减

对于不涉及到事务的表且字段不会频繁增加,建议设计为宽表,尤其对于BI系统。

当然,这只是一个最简单粗暴的原则,真正做的时候,你要考虑对于不同的数据库产品,宽表中很多字段是否为空等。

针对不用的场景做不同的选择,这句话,听起来很虚,其实很实。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24816552/viewspace-1735638/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24816552/viewspace-1735638/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值