热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据仓库_数据仓库搭建实例

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据仓库搭建实例相关的知识,希望对你有一定的参考价值。注:本文写的过程为项目实际处

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据仓库搭建实例相关的知识,希望对你有一定的参考价值。


注:本文写的过程为项目实际处理过程,与规范流程、大神们的流程有很多不合之处,限于本人能力,各位多理解。

目录:

1、背景

2、步骤

2.1、数据建模

2.2、数据抽取

2.3、数据存

 

3、经验教训

3.1、维表的低耦合与适度耦合。

3.2、建模过程中的注意事项。

3.3、数据任务处理失败后的处理。

 

一、背景:取移动设备每小时上网详细数据(DPI数据),进行分拆处理后放入小时表、天表,留做业务后续使用。其中数据识别过程、小时表存放在数据方,天表通过限定查询量的方式导入到本方机房。

 

二、步骤:


1、数据库建模(也有人说是数据建模)

建模前首先确定数据是用来做什么,可能使用的场景,以及最优化存储(后续使用(例如查询)容易,存储空间小)。

       数据源情况:DPI数据因为获取的滞后性,一般会与数据提供方滞后一日,所以不能做实时响应场景。DPI包含url、ua、imei、经纬度,时间等信息;其中过于敏感数据,如位置数据、实际购买商品,不在存储和分析范围之内。

     确定数据粒度:(此步很重要,需要业务、数据、开发都知晓)

     原始DPI数据,体量很大,一天十几个T,这需要将我们认为有用的数据抽取,同时相应的认为有用的关系不能丢掉过多、也不能保留过多。

  比如 数据中 包含   我 今天  上午十点49分打开掌阅阅读,50分打开浏览器搜索小说,然后退出浏览器,然后打开掌阅,浏览20分钟后关闭,又打开浏览器,搜索多个词。

这里面包含了时间、app、频次、顺序、app使用时间、搜索词,搜索词顺序,浏览器,搜索引擎网站 信息。  这就需要来确定保留哪些数据,抛弃哪些数据。保留越多,信息越详细,但是相应需要的存储空间与计算空间也越大。一般来说,时序是很少有客户需要的,出于经济考虑,舍弃。但是本人做了什么还是需要记录的。

  最终结果:保留客户使用app的小时id,site名称、app名称,关键词,基本能断定该人的行为;若需要有时间频次,可添加字段尝试。

     确定数据维度:

    首先是维表,维表需要考虑到数据识别结果表:一般来说,维表不建议多个因素放一起,比如app、site 本身可能有对应关系,但是数据识别结果如果分开,这里就没必要混合。但是有些项又最好放一起,比如手机型号,品牌,厂商,价格。

这里重点提一下,app、site都会有大量的垃圾数据,比如cdn的url,这种本身是利用价值比较低的,建议在数据定义阶段就排除(定义唯一后,置为失效,维护方便)

  其次是数据识别结果表,结果表需要根据不同的数据用途、数据的类似程度来存储。

2、数据抽取(远程传输,跨公司部门传输)

 基本原则: 抽取过程数据无损,节省资源,维护简单,版本变动小。

  项目的数据抽取,逻辑是:在提供方取数据,填充到redis,然后本方查询redis,将数据查询后写入本地hadoop,根据各种数据维表和规则,对结果进行拆分转换。

 dmp_redis_table-》分拆为  stags_bd,id_rel_bd

3、数据存储

基本要求:数据块大小适中,后续使用简单,合理使用分区。

这里重点说一下 ,hadoop对小文件的处理,是比较头疼的,如果有大量数据,尽量避免几千几万个小文件同时生成或使用的情况,会导致查询、写入时候耗费大量时间。

 将上一步抽取到的数据,按业务需求分拆到表 stdtags_bd,user_rel_bd,个人测试认为单个存储文件大小为400M-1G为最优。

三、经验教训以及注意事项:

1、维表的低耦合与适度耦合。

  这里延续 二-1 的数据维度的详细解释。在定义维表方面,如果与其他维度关联不大,尽量单独建表,容易维护和查询;如app名称,domain名称,识别搜索关键词,识别用户兴趣和倾向。

如果两者之间关联较大,如用户设备的信息,都与具体型号关联,可以做到一起;某些特殊品类app或者网站,也可以把分类写到定义维表,这样下一步使用都相对简单。

2、建模过程中的注意事项。

主要是建成的库表要切实符合已有业务需求,适度覆盖可能的业务需求,能够适度升级扩展。过程中主要是与各个同事和业务方的沟通,然后通过对业务逻辑的梳理,进行建模。

落实到数据库上,有业务表的字段制定、生成的文件数、文件大小的控制。

表和表内字段,最好在这一步都定义清晰明了,尽量符合整个部门甚至多个部门对数据处理的需求,切实符合已有业务需求,适度考虑未来可能的业务需求,可以预留几个字段,预留字段一般放在行尾。

适当的数据分区:有效分区能够分割大文件,提高后续使用效率,但是过多的分区会导致维护麻烦,后续使用中可能会出现无法查询全体需求分区的情况(数据库参数和能力限制)

3、数据任务处理失败后的处理。

这里包含两种:

 1、数据库内处理时异常和失败

    这里需要明确的是,数据处理失败率多少可以接受。在hadoop处理数据中,不能保证每一次都丝毫不差;如果数据源数据过大,处理时集群偶尔抽风,都可能导致处理失败,是否能够接受,不接受的话是否重新执行。这里一般是在MAPReduce过程中通过程序重试完成,设置最多重试次数,若还失败,放弃。

 2、程序流程失败

    程序流程的失败,包括升级测试不充分导致结果异常、中途网络延迟、网络间断、内存需求超过实际提供量导致泄露、操作人员误操作杀死进程、操作人员主动杀死进程等情况。

    大体要求:

       1\每一步都可单独重新执行,此步至关重要!因为谁都无法保证流程永远畅通,一旦出问题,从头再来的代价往往是几个小时的计算量,会让集群和业务崩溃。

       2\其他诸如网络延迟错误、部分数据丢失或重复等问题,需要考虑适度的容错机制。例如在MapReduce阶段设定容许失败率;设定程序每个阶段可以尝试执行的次数。

       3、开发和持有整个流程启动的备份代码,哪怕仅仅是执行脚本。一旦程序和集群出现崩溃,能够迅速有效的进行恢复。

 

 

 

 

 

 

参考:

1、业务文档

2、http://www.cnblogs.com/arnold/articles/2311192.html



推荐阅读
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • 人人租机作为国内领先的信用免押租赁平台,为企业和个人提供全方位的新租赁服务。通过接入支付宝小程序功能,该平台实现了从零到百的迅猛增长,成为全国首家推出“新租赁小程序”开发服务的阿里巴巴小程序服务商(ISV)。这一创新举措不仅提升了用户体验,还显著增强了平台的市场竞争力。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Jeecg开源社区正式启动第12届架构技术培训班,现已开放报名。本次培训采用师徒制模式,深入探讨Java架构技术。类似于大学导师指导研究生的方式,特别适合在职人员。导师将为学员布置课题,提供丰富的视频资料,并进行一对一指导,帮助学员高效学习和完成任务。我们的教学方法注重实践与理论结合,旨在培养学员的综合技术能力。 ... [详细]
  • 在MySQL中更新密码时,首先需要在DOS窗口中切换到mysql安装目录,并使用`--skip-grant-tables`参数启动MySQL服务,以跳过权限表验证。接着,在MySQL命令行中执行相应的SQL语句来设置新密码。完成密码更新后,重启MySQL服务以使更改生效。此外,对于电脑快捷方式的修改,可以通过右键点击快捷方式,选择“属性”,在弹出的窗口中进行路径或目标的修改,最后点击“应用”和“确定”保存更改。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 如何在Oracle ASM_Diskgroup中重命名现有磁盘
    如何在Oracle ASM_Diskgroup中重命名现有磁盘 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
author-avatar
白堤柳帘佳_688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有