什么是好的 AWS 解决方案(DB、ETL、批处理作业)来存储大量历史交易数据(每日刷新)以进行机器学习分析?
Posted
技术标签:
【中文标题】什么是好的 AWS 解决方案(DB、ETL、批处理作业)来存储大量历史交易数据(每日刷新)以进行机器学习分析?【英文标题】:What is a good AWS solution (DB, ETL, Batch Job) to store large historical trading data (with daily refresh) for machine learning analysis? 【发布时间】:2019-07-13 05:33:18 【问题描述】:我想构建一个包含大量历史交易数据的机器学习系统,用于机器学习(Python 程序)。
贸易公司有一个 API 来获取他们的历史数据和实时数据。历史数据约100G,日数据约200M。
交易数据是典型的时间序列数据,如价格、名称、地区、时间线等。数据的格式可以作为大文件检索或存储在关系数据库中。
所以我的问题是,在 AWS 上存储这些数据的最佳方式是什么,以及每天添加新数据的最佳方式是什么(例如通过 cron 作业或 ETL 作业)?可能的解决方案包括将它们存储在关系数据库(如 DynamoDB 或 Redis)或 NoSQL 数据库中,或将数据存储在文件系统中并由 Python 程序直接读取。我只需要找到一种解决方案将数据保存在 AWS 中,以便多个团队可以获取数据进行研究。
另外,由于这是一个研究项目,我不想花太多时间探索新系统或新兴技术。我知道有像 InfluxDB 或新的 Amazon Timestream 这样的时间序列数据库。考虑到学习曲线和期限要求,我暂时不打算学习和使用它们。
我熟悉 mysql。如果真的需要,我可以选择 NoSQL,比如 Redis/DynamoDB。
有什么建议吗?非常感谢!
【问题讨论】:
【参考方案1】:如果您想使用 AWS EMR,那么最简单的解决方案可能就是运行一个日常作业,将数据转储到 S3 中的文件中。但是,如果您想使用更多的 SQL-ey,您可以将所有内容加载到 Redshift。
如果您的目标是以某种形式提供给其他人,那么您绝对应该将数据放在 S3 中。 AWS 拥有 ETL 和数据迁移工具,可以将数据从 S3 移动到各种目的地,因此其他人不会因为数据存储在 S3 中而受到限制。
最重要的是,S3 是 AWS 中可用的最便宜的(热)存储选项,并且出于所有实际目的,它的存储空间是无限的。如果将数据存储在 SQL 数据库中,则会显着限制检索数据的速率。如果您将数据存储在 NoSQL 数据库中,您可能能够支持更多流量(也许),但成本会很高。
为了进一步说明我的观点,我最近做了一个实验来测试其中一个 S3 API 的某些属性,我的部分实验涉及从 EC2 实例向 S3 上传约 100GB 的数据。我能够在几分钟内上传所有这些数据,而且几乎没有任何成本。
您唯一需要决定的是数据文件的格式。您应该与其他一些人交谈,看看是否首选 Json、CSV 或其他东西。
至于添加新数据,我会设置一个由 CloudWatch 事件触发的 lambda 函数。 lambda 函数可以从您的数据源中获取数据并将其放入 S3。 CloudWatch 事件触发器基于 cron,因此可以轻松地在每小时、每天或任何满足您需求的频率之间切换。
【讨论】:
以上是关于什么是好的 AWS 解决方案(DB、ETL、批处理作业)来存储大量历史交易数据(每日刷新)以进行机器学习分析?的主要内容,如果未能解决你的问题,请参考以下文章