最佳实践是什么:将数据发布到 azure iot hub 或直接发布到 azure table storage

What is the best practice : to publish data to azure iothub or directly to azure tablestorage

我有一个网络应用程序。当前structure\flow如下

我的查询

  1. 而不是直接发布到 Table存储,拥有 Azure 资源 IOTHub,设备可以向其发布数据会有什么好处吗?如果是这样,请告诉我。

    -->在这种情况下,放置在 IoTHub 上的数据应该放在哪里,以存储所有接收到的数据以备将来参考?

    ---> b.我之前使用过使用 StreamAnalytics 的选项,使用查询将在 IoTHub 端接收的数据插入 TableStorage。 only\good选项是否可用?

    ---> c。或者我们是否有任何其他选项来保存发布到 IoTHub 的数据?

  2. 当前从设备直接将数据插入Table存储的流程是否可行(最佳做法?)?如果不是,请提出解决问题的最佳方法。

设备到云的消息被路由到与 Event Hubs.This messages are retained by IoT Hub. The default is one day, but it can be increased to seven days.You can modify the retention time, either programmatically through the IoT Hub resource provider REST APIs 兼容的内置面向服务端点 (messages/events),或者通过使用 Azure portal.So 不需要直接将数据发布到Table存储,IoT Hub可以将数据存储为缓存。

Azure Storage 包含三种数据服务:Blob 存储、文件存储和队列存储。 Blob 存储支持标准存储和高级存储,高级存储仅使用 SSD 以实现最快的性能。另一个功能是冷存储,允许您以较低的成本存储大量很少访问的数据。

我一直在阅读有关使用 IoTHub 和 TableStorage 获取数据的信息。 我的分析,最重要的是我使用 Table 存储的经验,让我对此有了一些理解。

在存储数据之前将数据发布到 IoTHub 是有充分理由的Table。

在我的案例中,我看到的一个好处是,最好将数据发布到 IoTHub,我可以获取在 IoTHub 上接收到的数据以在仪表板上显示它(这是最新接收到的)(UI);而不是查询存储表来获取最新的。

原因

虽然将数据发布到 Table 存储也可以正常工作,但可能会遇到一些性能问题。

  • 这里的问题是当数据在 Table存储中增长时,我们可能会得到一个 对性能的严重打击 side.i.e 如果 TableStorage PK 是这样设计的,它可能会在某个时间点建立一个分区下的大量数据。这就导致查询一个大数据的情况。
  • 另外TableStorage 对 PartitionKey 和 RowKey 仅有索引的限制;因此,当通过 PartitionKey 和 RowKey 访问时,它在性能方面表现最佳。
    • 即使我们通过 PartitionKey 和 RowKey 访问(查询),如果 Storage Table 的数据结构设计为具有这样的 PartitionKey,那么仍然会有大量数据。 例如,如果我们在 TableStorage 中收集 10 个设备信号详细信息,并将每个 PK 设计为具有相应的 SignalID(这样每个信号都分组在一个分区内)==> 然后在某一时刻进入 Signal 的数据将在分区内很大。这反过来又会非常严重地影响性能。