【问题标题】:What is the best practice : to publish data to azure iothub or directly to azure tablestorage最佳实践是什么:将数据发布到 azure iothub 或直接发布到 azure tablestorage
【发布时间】:2024-01-09 23:09:02
【问题描述】:

我有一个网络应用程序。目前的结构\流程如下。

  • 这有一个 Web 服务,Device 模块使用它来将特定于设备的数据放入我的 Table STorage。
  • 在 UI 端,SignalR 用于在 Dashboard(view-cshtml) 上显示发布到云的最新值,以及当设备中的数据进入 TableStorage 时。
  • 预计来自不同设备的数据会进入 TableStorage,并在 UI 端,根据所选设备显示相关数据。

我的查询

  1. 除了直接发布到 TableStorage 之外,拥有 Azure 资源 IOTHub 是否有任何好处,设备可以将其数据发布到该资源?如果是这样,请告诉我。

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

    ---> b.我之前使用了使用 StreamAnalytics 的选项,使用查询将 IoTHub 端接收的数据插入 TableStorage。 是唯一的\good 选项吗?

    ---> c.或者我们还有其他选择来保存发布到 IoTHub 的数据吗?

  2. 当前将数据从设备直接插入 TableStorage 的流程是否正常(最佳实践?)?如果不是,请提出解决方案的最佳方法。

【问题讨论】:

    标签: c# azure signalr azure-table-storage azure-iot-hub


    【解决方案1】:

    设备到云端的消息被路由到与Event Hubs兼容的内置面向服务的端点(消息/事件)。这些消息由 IoT 中心保留。默认为 1 天,但可以增加到 7 天。您可以通过IoT Hub resource provider REST APIs 以编程方式修改保留时间,也可以使用 Azure 门户。因此您无需将数据直接发布到 Table Storage, IoT Hub 可以将数据存储为缓存。

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

    【讨论】:

    • 1.要求是像我们在经典数据库中一样永久保存数据。 Web 应用程序应具有查看历史数据的选项。那么 IoTHub 是否支持这一点? ____ 2.发布到IoTHub而不是直接插入TableStorage有什么好处?
    • 1.IoTHub不支持永久保存数据。 2.您可以通过link获取有关IoTHub的信息和好处。
    • 好的,谢谢 MichaelXu。
    【解决方案2】:

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

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

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

    原因

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

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

    【讨论】:

      最近更新 更多