从物联网中心到Azure SQL数据库中的多个表

时间:2019-01-13 14:14:11

标签: azure azure-sql-database azure-iot-hub azure-stream-analytics

我有一个IOT集线器,其中的设备会将其传感器数据推送到其中,并存储在SQL数据库中。通过Stream Analytics作业似乎很容易做到。

但是,棘手的部分如下。我要推送的数据未规范化,并且由于我使用的是SQL数据库,因此我希望在多个表之间构建数据。对于Stream Analytics,这似乎不是一件容易的事。

这是我推送到IOT集线器的有效负载的一个示例:

{
    "timestamp" : "2019-01-10 12:00",
    "section" : 1,
    "measurements" : 
    {
        "temperature" : 28.7,
        "height" : 280,
        "ec" : 6.8
    },
    "pictures" : {
        "101_a.jpg",
        "102_b.jpg",
        "103_c.jpg"
    }
}

我的数据库有一个表 Measurement MeasurementItem Picture 。我想将时间戳和节存储在 Measurement 记录中,将温度,高度和ec存储在 MeasurementItem 记录中,并将图片存储在 Picture 中>表格。 填充一个表很容易,但是要填充第二个表,我需要前一条记录的生成的自动增量ID来保持关系完整。

Stream Analytics实际上可行吗?如果没有,我应该怎么做?

2 个答案:

答案 0 :(得分:2)

出于多种原因,您不应该在Stream Analytics(SA)上尝试使用它。它不是为这样的工作负载而设计的,因为否则SA将无法执行此工作。它只是根据输入数据将数据发送到一个或多个接收器。

我建议将数据传递到能够在输出端执行逻辑的组件。有一些选择。 2个示例可能是:

  • Azure Function(通过服务总线触发,指向here中所述的IoT中心内置端点)
  • 您将IoT数据写入到存储中的基于事件网格的触发器(因此再次可以使用Azure函数,但让它由存储帐户中的事件触发)

此解决方案还附带有价格,每个传入数据包将调用一个逻辑单元,您必须为此额外付费。请注意,Azure Functions上有计费选项,这些选项不取决于调用数量,但可以为您提供更像应用程序服务的模型中的逻辑。

如果要处理的数据量很大,则可以考虑将Data Lake Storage AccountData Lake Analytics结合使用的体系结构。后者也可以将传入的数据收集,汇总和分发到不同的数据存储中。

答案 1 :(得分:0)

我最终获得了带有IoT中心触发器的Azure功能。该函数使用EF Core将JSON消息存储在SQL数据库中,并分布在多个表中。我不太愿意使用这种方法,因为它引入了额外的逻辑,我希望为此付出更多。

似乎相反。对于Azure Functions,前400,000 GB / s的执行速度和1,000,000次执行是免费的。此外,该解决方案还提供了额外的灵活性和控制力,因为单表限制不再适用。

Azure function costs