数据存储那点事:数据湖和数据仓库

数据湖是个筐,什么都能往里装……物联网设备传感数据、网站、APP、社交媒体和业务系统的非结构化数据和结构化数据统统往里装。

数据仓库就不同了,既然是仓库,就需要事先规划,按品类分区,原料、半成品以及成品分开存储,以提高出入库、调拨的效率。

事实上确实如此,数据仓库(DW, Data Warehousing),通常分为:

  • 操作数据层(ODS, Operational Data Store)
  • 明细数据层( DWD, Data Warehouse Detail)
  • 汇总数据层(DWS , Data Warehouse Summary)
  • 应用数据层(ADS, Application Data Store)

另外还有一个公共维表层(DIM) 。

先不要被这些概念吓住,以后讲数据仓库建模的时候会详细说,先初步有个印象。

类比来看,这就是一个数据原材料——原材料半加工——半成品全加工——按需食用的过程。

  • 结构化的数据先原样存入 ODS 层。要用到数据采集、同步的技术,上篇文章有写到。这一步相当于把原材料拉进仓库里。操作数据层和数据湖有点像,但不包含半结构化、非结构化数据。
  • 明细层和汇总层,存的都是事实表,事实表又是个啥?就是反应了一项事实,比如谁什么时间花了多少钱购买了哪个商家的某个产品。这正好是一张数据表的各项字段。明细层存的是详细的事实数据,而汇总层,是按业务需求,做了一定的汇总后存放的数据,比如最近 7 天北京地区活跃的男性和女性用户数量,这是一行汇总数据,是根据明细数据汇总而成的数据。
  • 明细层的数据,是从 ODS 加工而来的,如何加工?最简单常见的就是 JOIN、UNION,写一些复杂的 SQL。这一步是半加工。
  • 我们建数据仓库,最终还是为数据分析(OLAP)、可视化等业务应用提供支撑。为了更好地调用、分析数据,数据是按主题分类的,就是后文要说的「面向主题」。
  • 公共维表层,存放用于分析时的那些维度,维度是衡量和观察业务的角度。比如省市区、年月日、用户等级等。

说清楚了数据仓库,再来回顾下数据湖和数据仓库最大的不同。

数据湖是一个庞大的混合存储库,一般是集中式的,可以存储所有结构化和非结构化数据。

而数据仓库,是一个「面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。」这是数据仓库之父Bill Inmon在 1991 年出版的《Building the Data Warehouse》一书对数据仓库所做的定义。

  • 面向主题,简单来说,就是按目的(比如分析的指标大类)把数据分类,比如电商的数据运营,会对商品、会员、销售、物流等各项指标分析,可以按以上分类把数据分表存放。
  • 集成的,意思是多个供应商(业务系统)的货(数据),我们都有序地存放在一个中央仓库(数据仓库)里,康师傅和统一的方便面,我们都放在方便面的货架里。
  • 相对稳定,这是区别于 OLTP 数据的特点,比如一条订单数据,状态会不断变化,有下单(待付款)、付款(待发货)、发货(待确认收货)……等一系列更新(UPDATE)过程,这就是不稳定,而存入数仓的数据,一般不会再更新。
  • 反应历史变化,是指要把反映过程的数据尽可能地存储下来,以便支撑更为精细的分析。这样一来存入的数据会很多,以上面的订单数据为例,在 OLTP 中只有一条记录,可能只有状态字段和时间字段更新,其它商品、用户字段不发生变化,而在数仓中,会把每次更新都存下来,这样会有多条数据。而「拉链表」就是优化这种存储场景的一种方法(以后详述),可以有效降低存储成本。

数据仓库这种「数据集合」,需要根据业务的需要,事先规划定义数据结构,因此它可以用传统的关系型数据库来搭建,因为要存储很多历史数据,所以要对单表的存储容量和性能有所要求,传统数据仓库很多都是用 Oracle 搭建的。

那么说数据仓库和大数据又有什么关系吗?数据仓库是种方法论,大数据能提供技术手段。比如 Hive,就是大数据里用来搭建数据仓库的好组件。

数据湖是不是就是一个简单的混合存储库?也不是。数据湖并不是存储方案,它的目的也是用于分析和指导决策。

  • 数据湖本身要支持运行不同类型的分析(如 SQL 查询、大数据分析、全文搜索、实时分析和机器学习),不需要将数据移至另外的分析系统。
  • 数据湖要能够对数据进行爬网、编目和建立索引来让用户了解和使用湖中的数据。这项功能的难度很高,因为数据湖中的数据更为复杂。

数据仓库可以充当用户可信任的「单一信息源。」数据湖则是以更丰富的数据格式和类型,以及更全面的分析工具,提供更广泛价值挖掘的可能性。

对于当前大部分公司的数据应用水平来说,应先建立规范的数据仓库,这是对理念和方法的考验,而不是技术和手段(用关系型数据库就能建立)。数据湖,在更先进的技术屏蔽了复杂的存储、编目和底层分析工具后,将会是趋势,可逐步关注。

关耳爷

微信号wei-talk

理解大数据本应很简单:什么是数据集成和数据治理

本文是《极简大数据》系列第二篇。

不管出于什么目的,假设你要利用一批数据。那么你期望数据是什么样的?

答案很简单:全、快、对。

当然也可以换三个词:全域数据、实时数据、高质量数据。

我个人还是喜欢上面接地气的词。

如果你关注大数据,或者是做数据产品经理,应该了解数据集成和数据治理。

它们都是手段,最终为数据的使用而服务。

经过集成和治理后的数据,我们期望是能高效使用的、高质量的、高价值的数据。

实现高价值,前提条件是数据要全和快,这是对数据集成能力的要求。

数据的主要来源有三种,一是业务发生后系统产生的数据,存放在关系型数据库或 NoSQL 数据库中,比如在淘宝剁手下单,就会产生一条订单记录,谁什么时间在哪个店铺购买了一件什么商品,付款多少钱等。

第二类是系统服务环境产生的日志文件,如 Nginx、Apache 等对于 HTTP 请求和响应生成的记录文件,在浏览器里输入淘宝网址回车,淘宝的服务器就记下哪个 IP 在什么时间访问了淘宝,打开了哪几个页面,停留了多长时间,客户端有什么特性(如分辨率大小、浏览器版本、操作系统版本等)。

第三类是从客户端(浏览器、APP)采集到的用户行为日志文件,称为埋点日志,是程序员开发出来的一小段程序,可以采集到你做了什么动作,如点击商品加入购物车、切换到评论页面等,便于运营人员更好地分析用户如何使用应用。

当然数据还有更多的来源和格式,如传感器采集到的数据等,可以看这一篇

这三类数据都要能从源服务器上采集过来。有的数据是结构化的,如关系型数据库,有的是半结构化的,如 NoSQL 数据库、日志文件。更大的范围来说,图片、音频、视频等非结构化数据,也要能够支持采集。

这是对所能采集的数据类型的要求。在采集方式上,还要能支持全量、增量采集。

全量采集就是每次都完整拉一遍。缺点很明显,需要带宽流量和时间,不符合对快的要求;增量采集,程序要记得每次采到了哪里,采过的数据如果某些发生了变化,也要能感知,在下一次采集时把变化的数据带回来。

传统上,增量采集可以用时间戳、标志位、触发器等方式搞定,这需要数据源的配合,有时候,我们没有条件干涉数据源。

大数据技术下,对于关系型数据库,可以采集数据库的日志,再解析日志还原数据,实现增量的流式采集。如 MySQL 配置好 Binlog 日志,通过 Kafka 把日志实时发送过来。其它数据库也都有类似的方法。

对于关系型数据库,Apache 社区有开源组件 Sqoop,它主要用于在关系数据库和Hadoop之间传输数据。对于日志文件的采集,开源组件有 Flume、Logstash 等。

不仅多种类型的数据能够采集,还要速度快,讲究实时、准实时,达到秒级的同步。

数据时效性的价值不言而喻。数据一旦产生,就能感知和传输过来,与之前采集的数据增量合并形成最新最完整的数据。

只有足够快,才能不错过一些重要的分析和监控,许多实时的数据业务对此都有要求,如风控、推荐等。

数据量大,要求采集吞吐率高,而吞吐率和延迟(快慢)又是一对矛盾体,意思是说,大数据规模下,想要实时,是很有挑战的,例如天猫双 11 活动的大屏,看着只是几个数字在变,这背后的技术是相当硬核的。

再来说数据的质量问题。

高质量,代表数据不多、不少、不错、一致。

展开来说就是不重复冗余,没有其它数据混杂在内造成干扰;数据不残缺,行列记录都是完整的;标准一致,代表相同意义的数据字段类型、格式最好都能统一。

这些都是数据治理功能所要解决的问题,对已经是结构化的数据从库、表、字段不同级别进行标准和质量的监控、基于规则模型去校验和纠错等。

对应的就是数据标准管理和数据质量管理。

治理的另一个范围是数据安全,包含敏感和隐私数据不能泄露,数据不能被非法访问,对数据访问进行监控和审计。涉及到脱敏、数据权限和监控审计等功能。

在 DAMA(国际数据管理协会)中,对数据治理定义了九个方面的内容。

元数据也是很重要的一部分,元数据是指「关于数据的数据。」就是全方位、多角度地描述一份数据所形成的数据。就像简历之于人的关系,如果简历内容十分丰富,那我们就可以全面地了解这个人。

对于数据也是一样,从技术(数据格式、存储大小、更新时间……)、业务(描述什么业务的数据,属于哪个信息系统等……)、管理(谁在负责该数据、安全等级……)多个角度充分地描述数据,那我们就能对这个数据有清晰的了解和认识。

我们可以通过元数据快速查找和定位数据,也可以通过分析元数据,看清数据的来龙去脉,它产生的过程,以及它对别的数据的影响,这就是所谓的数据血缘。

总结来说,数据集成和数据治理的功能范围,就是为实现上述目标所框定的。

首先确保可用性和性能,真正能把多源异构的数据接入进来,保证传输的可靠性。

原始数据落地之后,需要对它进行有效的治理,通过元数据、数据标准、数据质量、数据安全等多种手段,确保数据是精确、完整、有效的,以便于下一步数据能更好地利用。

关于数据集成和治理,我们先明确目标和架构,以后的篇幅我会细讲里面每个小的模块。

关耳爷

微信号wei-talk

— 你也可能感兴趣 —