如何处理关系数据库中的AWS IOT流数据

时间:2018-05-09 08:55:26

标签: amazon-web-services amazon-dynamodb iot aws-iot

通用信息:我正在为IOT问题方法之一设计解决方案,其中数据从plc(可编程逻辑控制器)连续流式传输,plc有不同的标签,这些标签代表遥测数据和数据将从这些标签连续流式传输,每个设备都会有报警标签,这些标签将为0或1,1意味着设备出现故障 问题陈述: - 如果任何警报标签值为1,我必须读取警报标签并提出票证,我必须将这些警报流式传输到仪表板,我也必须维护票证历史记录,所以运营商也可以更新票证状态

我的解决方案: - 我正在使用aws IOT,我在Dynamo db中获取数据然后我使用dynamo db stream来检查是否在警报表中添加了任何新项目以及是否会触发lambda函数(我在java中实现)lambda函数使用hibernate在关系数据库中打开一个新票证。

我的方法存在的问题: - aws iot数据在报警表中以非常快的速度连续流式传输,并且在它关闭之前打开了很多连接我的关系数据库下来

如果我采用其他好的设计方法,请告诉我?

4 个答案:

答案 0 :(得分:1)

使用Amazon Kinesis Analytics处理流数据。 Dynamodb并不适合这种情况。

了解更多here

下面的图片会给你一个相同的想法

enter image description here

答案 1 :(得分:1)

只是提案......

从lambda,请勿联系RDS,

而是在AWS SQS中推送所有警报

然后,您可以使用AWS CloudWatch规则为每分钟安排另一个lambda,该规则将从AWS SQS中选择所有项目,然后立即将它们插入RDS中。

答案 2 :(得分:1)

我同意raevilman的设计,不让Lambda直接联系RDS。 由于创建新票证不是Lambda函数正在执行的唯一任务,因此您还将这些警报传输到仪表板。根据流速率和RDS限制,您可能希望将这些任务拆分为多个队列。

通用解决方案:我建议您可以将警报推送到扇出交换机,此交换机将根据需要将警报推送到一个或多个队列。然后,您可以批量处理警报并一起执行多次写入,而无需多次执行连接/断开连接。

AWS特定解决方案:我还没有使用过SQS,因此无法对其架构进行评论。或者,您可以创建SNS主题并将这些警报发布到此主题。然后,您可以将SQS队列作为此主题的订阅者,而这些队列又将用于票证和仪表板目的,彼此独立。

再次,从票务队列中,您可以使用Lambda或您自己的调度程序在批处理和处理票据中轮询消息(频率取决于时间关键警报的时间)。 您可能需要阅读this tutorial以获得一些指示。

答案 3 :(得分:0)

您可以控制lambda函数并发数。这将减少基于发电机事件进行调整的lambda数量。从而减少与RDS的连接。

https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency/

当然,这会限制发电机事件。