Amazon web services 如何在关系数据库中处理AWS物联网流数据

Amazon web services 如何在关系数据库中处理AWS物联网流数据,amazon-web-services,amazon-dynamodb,iot,aws-iot,Amazon Web Services,Amazon Dynamodb,Iot,Aws Iot,一般信息:-我正在为一种物联网问题方法设计解决方案,其中数据从plc(可编程逻辑控制器)连续传输,plc具有不同的标签这些标签表示遥测数据,数据将从这些标签连续传输,每台设备都有报警标签,报警标签为0或1,1表示存在设备故障 问题陈述:-如果任何报警标签值为1,我必须读取报警标签并发出通知单,我必须将这些警报流到仪表板,我还必须维护通知单历史记录,以便操作员也可以更新通知单状态 我的解决方案:-我使用aws IOT,我在dynamo db中获取数据,然后我使用dynamo db stream检查

一般信息:-我正在为一种物联网问题方法设计解决方案,其中数据从plc(可编程逻辑控制器)连续传输,plc具有不同的标签这些标签表示遥测数据,数据将从这些标签连续传输,每台设备都有报警标签,报警标签为0或1,1表示存在设备故障 问题陈述:-如果任何报警标签值为1,我必须读取报警标签并发出通知单,我必须将这些警报流到仪表板,我还必须维护通知单历史记录,以便操作员也可以更新通知单状态

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

我的方法存在问题:-aws物联网数据在报警表中以非常快的速度连续传输,这会在关闭之前打开大量连接,这会导致我的关系数据库崩溃


请告诉我是否可以采用其他好的设计方法?

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

阅读更多

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

只是一个提议

从lambda,不要联系RDS

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


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

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

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

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

在这里,您可以使用Lambda或您自己的调度程序在批处理和处理票证中轮询消息(频率取决于时间关键型报警的方式)。
您可能需要读取以获取一些指针。

您可以控制lambda函数并发的数量。这将减少基于dynamo事件的lambda的数量。从而减少与RDS的连接


当然,这将限制迪纳摩的赛事

我已经看过这个帖子了,问题是我不知道;i don’我不必对数据流进行任何分析,我必须获取数据并检查标志,根据标志我必须打开票据并将票据流式传输到ui,我还必须流式传输警报检查数据上的某些内容是一种分析:)嘿,顺便问一句,在你的问题中“关闭数据库”是什么意思?我的意思是“把你的数据库取下来“意味着在关闭之前打开了太多的连接,因此会影响rds实例连接限制,并且其他api无法访问db'soh明白了,,,,发布了另一个答案:)我还想到了除cloudwatch规则之外的解决方案,我有一个问题,如果我在1分钟内轮询sqs,并且假设即使我正在处理队列,数据速率也小于1秒,队列是否会溢出?对于标准队列,最多可以有120000条机上消息。更多关于限制的信息,这里我必须尝试这一个确定沙申克,我会删除这个和我以前的评论,然后这种方法可能会有问题,数据速率非常高,1秒钟内有5个数据点,所以已经有很多处理正在进行物联网规则->发电机->lambda,如果我考虑你的情况,我将包括SQL,所以流将是IOT规则- DeaMoO>lambda>Sqs> LAMBDA,不确定QS中的投票率,但我认为数据不会是实时的,因为会有大量的处理,需要检查flowIOT规则->dynamo->SNS->SQS->lambdaI我想当你有一组lambda并且你想要管理这些lambda时,并发选项是可用的,这里我使用一个lambda函数,你也可以为一个函数设置它。比方说,当你设定10为极限时。您的最大rds连接总数为10。如果我将限制设置为10,那么由于数据速率非常高,数据延迟会有很多延迟。这只是一个基准测试,您可以为此过程提供多少RDS连接,它们是否足以处理负载。如果是,只需设置lambda并发的限制,就可以在不添加外部水平可伸缩性资源(如SQS或Kinesis)的情况下使用。这有帮助吗?所以PLC发出警报,DynamoDB流检查是否是新警报,如果是,Lambda会向关系数据库添加一个记录单。问题是否仅限于关系数据库?我对这个问题不是100%清楚。我们在谈论多少连接?出于兴趣,为什么会有这么多警报?听起来您应该在DynamoDB(所有PLC数据)上有很多活动,而在关系数据库(只有新的报警)上几乎没有活动。