AWS:如何将流数据保存到EC2托管的数据库(例如MySQL / MongoDB)

问题描述 投票:3回答:3

我们可以轻松地在不同的AWS Services for ex之间保存数据。 Kinesis到DynamoDB;或将AWS IoT迁移到Redshift等。

但是将流数据保存到假定MongoDB(没有AWS PaaS;有Atlas但与其他AWS服务没有集成的最佳策略是什么)

我可以看到一些第三方解决方案;但是在AWS本身上实现的最佳策略是什么...对每个插入(分批处理)执行lambda函数是唯一的选择吗?

mongodb amazon-web-services iot amazon-kinesis
3个回答
3
投票

您可以在每次FireHose调用时调用lambda函数。而且此lambda可以插入EC2上托管的mongodb中。您可以批处理操作,以减少lambda调用的次数(并相应地减少成本)


3
投票

我假设您正在使用Kinesis Firehose。如果是这样,您可以做的是:

  • 从Firehose每5分钟写入S3。

  • Firehose将每5分钟在S3上创建一个新文件。

  • 触发Lambda函数以读取S3上的新文件。

  • 将新文件的数据写入MongoDB。

[如果您使用的是Kinesis(而不是firehose),则只需编写一个Kinesis使用者,它将从Kinesis中读取数据并直接写入MongoDB。

FYI,有像MongoDB这样的DocumentDB,就像API,您可以将其用作AWS托管的MongoDB


0
投票

解决方案主要取决于您的用例。您需要多快的时间将数据插入到MongoDB中?

如果您需要近乎实时的解决方案,那么Kinesis和Lambdas是您的最佳选择(假设您不想投资第三方产品)。如果您可以承受延迟并进行批处理,则可以将kinesis流保存到S3中,然后使用AWS Glue处理并将数据加载到数据库中。

您需要考虑的主要是您需要对数据做些什么。

如果您正在收集传感器数据,而您只在乎聚合(例如,UI中的单击),那么最好将原始数据存储到s3中,然后执行数据管道(例如,使用AWS Glue)进行存储将汇总数据导入MongoDB。对于这些类型的数据,S3将更快,更便宜。

如果您使用流来传递业务实体(例如,可自行提供价值的文档),那么使用AWS lambda的近实时解决方案将是更好的选择。

[不知道确切的用例,我建议只在数据库中存储提供价值的数据(例如,有关汇总数据的报告),并将S3与生命周期策略一起用于原始“传感器”数据。

© www.soinside.com 2019 - 2024. All rights reserved.