数据工程指南高级技能:如何选择数据平台

数据工程指南:教大家如何成为优秀的数据工程师。

在之前的文章中,我们探讨了入门知识和基础技能,接下来深入介绍高级技能。

系列文章:

《数据工程指南:初学者入门》
《数据工程指南:基础技能》

原文来源于Github开源项目《The Data Engineering Cookback》
作者:Andreas Kretz
感兴趣可以查看:Data Engineering Cookbook

为什么需要一个好的数据平台?

我在这个视频教程中谈到了数据平台的重要性:从数据工程师的角度看数据科学项目

大数据 vs 数据科学 vs 商业分析

我在这个播客中讨论了三者的区别:商业智能 vs 数据科学 vs 大数据

大数据的四个V

Volume: 数据量大小,你有多少数据

Velocity: 速度,数据以多快的速度到来

在一个特定的时间段需要处理多少数据,这是流式数据(streaming data)和实时处理(realtime processing)的研究范畴。

Variety: 多样性,你的数据有多大的不同

常见的数据存储格式有: csv, pdf, xml, json, 键值对存储等等。

这些数据来自不同的数据源,你希望将这些数据类型连接在一起,然后根据整合数据进行分析。

Veracity: 可靠性,你的数据有多可靠

大数据的问题是,它非常不可靠。

你不能真的相信这些数据,尤其是当你从物联网(IoT)获取数据的时候,物联网设备利用传感器来测量温度、压力等。

你不能百分之百地肯定测量值是正确的。

当有来自例如SAP的数据并且包含手工创建的数据时,也会遇到问题,因为人类不擅长输入数据。

为什么使用大数据?

从四个V的角度看待数据是合理的,这让从我们宏观层面理解数据。

还有一个更重要的问题:灾难性成功。

我所说的灾难性成功是指,你的项目、你的创业公司或你的平台的增长速度超过了预期,而指数增长是每个人追求的目标。

指数增长意味着商机,项目刚开始很小,很快就会变得很大。经典曲棍球曲线:

1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384 … 爆发!

当有很多用户花钱购买你的产品,而你的系统没有实现同步扩张,就无法处理日益增长的数据量,结果是整个系统崩溃。

这就是灾难性成功,你的项目获取了巨大的成功,以至于系统无法满足商业需求。

计划是关键

一切都发生得太快,以至于根本没有时间优化系统。现在有必要对项目的增长潜力分析并计划数据平台的架构。

你需要决定是否使用大数据工具,这意味着要重新规划整个系统的底层架构。

从长远来看,这对项目有巨大的好处。好的设计可以解决很多问题,特别是将来可能要处理流数据和实时分析。

ETL的问题

一个典型的老式平台看起来像下图。设备产生数据,通过API传输并存储到SQL数据库,有一个外部分析工具查询数据库,并将结果重新写入数据库,前端直接与数据库交互,获取数据并展示给用户。

在这里插入图片描述

当前端从SQL数据库中查询数据时,一般有3个步骤:

  1. 从数据库中提取需要的行记录(提取)
  2. 转换提取的数据,例如按时间戳或更复杂的方式排序(转换)
  3. 将转换后的数据加载到目标(用户界面)以创建图表(加载)

这就是经典的ETL(Extract, Transform, Load)过程。

随着数据量的爆炸式增长,ETL开始成为一个问题。

当数据集非常大,比如100GB或兆兆字节(Terabytes),数据表可能有数十亿或万亿行,这会导致ETL耗时更长。很快,ETL性能变得如此糟糕,以至于无法再将结果传递给分析工具。

克服这些性能问题的传统解决方案是尝试提高数据库的性能,即所谓的垂直拓展(scaling up)。

垂直拓展(Scaling Up)

垂直拓展意味着使用更强大的硬件,例如:

  • 使用更快的磁盘来提升读写性能
  • 增加内存以改善缓存
  • 内存中已经存在的数据不再写入硬盘
  • 使用更强大的CPU加速计算(转换)
  • 提升网络性能,以便更快地将数据传输到前端

简单来说,垂直拓展相当容易。

在这里插入图片描述

但随着数据继续呈指数级增长,迟早会遇到同样的问题。

在某些情况下,你根本无法再扩展,因为系统已经非常巨大,或者买不起更昂贵的硬件。

下一步可以做的就是水平扩展(scaling out)。

水平拓展(Scaling Out)

水平拓展与垂直拓展相反,与其构建更大的系统,倒不如在许多较小的系统之间分配负载。

扩展SQL数据库的最简单方法是使用存储区域网络(SAN)存储数据,然后让SAN来处理查询(最多可以使用8个服务器),这样一来就可以在多台服务器之间分配负载。

在这里插入图片描述

这种设置的一个主要缺点是,由于存储是在SQL服务器之间共享的,因此它只能用作只读数据库。更新必须定期进行,例如每天一次。要进行双重更新,所有的SQL服务器都必须与数据库分离。然后,在读写模式下附加数据库并刷新数据。如果需要上载大量数据,可能需要一段时间。

我不想深入探讨水平拓展SQL数据库的解决方案,尽管可以实现,但非常复杂。

没有完美的解决办法,每一个方案都有优缺点。其中有一个共同的问题,为了实现和维护这些水平拓展的解决方案,需要大量的管理性工作。

不要盲目使用大数据工具

如果你还没有遇到拓展问题,请不要使用大数据工具!

大数据非常昂贵,一个Hadoop集群至少需要五个服务器才能正常工作,服务器越多,性能越好。

相信我这些工具要花很多钱。

当有一天你真的需要这些工具时,它们反而能帮你省很多钱。


你们的点赞和收藏是我们最大的创作动力,我们每天都会为大家带来数据科学和量化交易领域的精品内容。

蜂鸟数据:开源金融数据接口,一个API连接世界金融市场。

蜂鸟数据团队由业界顶尖的数据工程师,数据科学家和宽客组成,我们正努力构建一个开源的金融数据库,并提供API接口,目标是令金融数据开源化和平民化。

浏览并测试我们接口吧,目前覆盖股票,外汇,商品期货,数字货币和宏观经济领域,包括实时报价(tick)和历史数据(分钟),提供REST API和Websocket两种接入方式,能够满足金融分析师,量化交易和理财app的需求。

蜂鸟数据API接口文档

领域,包括实时报价(tick)和历史数据(分钟),提供REST API和Websocket两种接入方式,能够满足金融分析师,量化交易和理财app的需求。

蜂鸟数据API接口文档

登录蜂鸟官网,注册免费获取API密钥

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页