AWS:如何将流数据保存到 EC2 上托管的数据库(例如 MySQL/ MongoDB)
AWS: How to save Streaming data to database hosted on EC2 ( ex. MySQL/ MongoDB )
我们可以轻松地在不同的 AWS 服务之间保存数据,例如。运动到 DynamoDB;或 AWS IoT 到 Redshift 等
但是什么是保存流数据的最佳策略假设MongoDB(它没有 AWS PaaS;Atlas 在那里,但它没有与其他 AWS 服务集成)
我看到有一些第三方解决方案;但是在 AWS 本身上实施的最佳策略是什么...为每个插入(批处理)执行 lambda 函数是唯一的选择吗?
您可以在每次 FireHose 调用时调用 lambda 函数。这个 lambda 可以插入到 EC2 上托管的 mongodb 中。您可以批处理操作以减少 lambda 调用的次数(并在 return 中降低成本)
我假设您使用的是 Kinesis Firehose。如果是这样,您可以做的是:
从 Firehose 每 5 分钟写入一次 S3。
Firehose 将每 5 分钟在 S3 上创建一个新文件。
触发 Lambda 函数读取 S3 上的新文件。
将新文件的数据写入MongoDB。
如果您使用的是 Kinesis(不是 firehose),您可以简单地编写一个 Kinesis 消费者,它将从 Kinesis 读取数据并直接写入 MongoDB。
仅供参考,DocumentDB 与 MongoDB 类似 API,您可以将其用作 AWS 托管 MongoDB
解决方案主要取决于您的用例。您需要多快将数据插入 MongoDB?
如果您需要近乎实时的解决方案,那么 Kinesis 和 Lambdas 是您的最佳选择(假设您不想投资于第 3 方产品)。如果您可以承受延迟并进行批处理,那么您可以将运动流保存到 S3 中,然后使用 AWS Glue 处理数据并将其加载到数据库中。
你需要思考的主要是你需要用数据做什么。
如果您正在收集传感器数据,而您只关心聚合(例如 UI 中的点击),那么最好将原始数据存储到 s3 中,然后执行数据管道(使用例如 AWS Glue)将聚合数据存储到 MongoDB。对于这些类型的数据,S3 会更快、更便宜。
如果您使用流来传递业务实体(例如,自己提供价值的文档),那么使用 AWS lambda 的近乎实时的解决方案将是更好的选择。
在不知道确切用例的情况下,我建议仅将提供价值的数据(例如聚合数据报告)存储在您的数据库中,并将 S3 与原始 "sensor" 数据的生命周期策略一起使用。
我们可以轻松地在不同的 AWS 服务之间保存数据,例如。运动到 DynamoDB;或 AWS IoT 到 Redshift 等
但是什么是保存流数据的最佳策略假设MongoDB(它没有 AWS PaaS;Atlas 在那里,但它没有与其他 AWS 服务集成)
我看到有一些第三方解决方案;但是在 AWS 本身上实施的最佳策略是什么...为每个插入(批处理)执行 lambda 函数是唯一的选择吗?
您可以在每次 FireHose 调用时调用 lambda 函数。这个 lambda 可以插入到 EC2 上托管的 mongodb 中。您可以批处理操作以减少 lambda 调用的次数(并在 return 中降低成本)
我假设您使用的是 Kinesis Firehose。如果是这样,您可以做的是:
从 Firehose 每 5 分钟写入一次 S3。
Firehose 将每 5 分钟在 S3 上创建一个新文件。
触发 Lambda 函数读取 S3 上的新文件。
将新文件的数据写入MongoDB。
如果您使用的是 Kinesis(不是 firehose),您可以简单地编写一个 Kinesis 消费者,它将从 Kinesis 读取数据并直接写入 MongoDB。
仅供参考,DocumentDB 与 MongoDB 类似 API,您可以将其用作 AWS 托管 MongoDB
解决方案主要取决于您的用例。您需要多快将数据插入 MongoDB?
如果您需要近乎实时的解决方案,那么 Kinesis 和 Lambdas 是您的最佳选择(假设您不想投资于第 3 方产品)。如果您可以承受延迟并进行批处理,那么您可以将运动流保存到 S3 中,然后使用 AWS Glue 处理数据并将其加载到数据库中。
你需要思考的主要是你需要用数据做什么。
如果您正在收集传感器数据,而您只关心聚合(例如 UI 中的点击),那么最好将原始数据存储到 s3 中,然后执行数据管道(使用例如 AWS Glue)将聚合数据存储到 MongoDB。对于这些类型的数据,S3 会更快、更便宜。
如果您使用流来传递业务实体(例如,自己提供价值的文档),那么使用 AWS lambda 的近乎实时的解决方案将是更好的选择。
在不知道确切用例的情况下,我建议仅将提供价值的数据(例如聚合数据报告)存储在您的数据库中,并将 S3 与原始 "sensor" 数据的生命周期策略一起使用。