最佳做法是:将数据发布到azure iothub或直接发布到azure tablestorage

时间:2017-11-16 05:50:17

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

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

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

我的查询

  1. 而不是直接发布到TableStorage,设备可以发布其数据的Azure资源IOTHub是否有任何好处?如果是这样,请告诉我。

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

    --->湾我之前使用过使用StreamAnalytics的选项,使用查询将IoTHub端接收的数据插入TableStorage。 是唯一\可用的好选择吗?

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

  2. 将数据直接从设备插入TableStorage的当前流程是否正常(最佳做法?)?如果没有,请建议采用解决方案的最佳方式。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

<强>原因

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

  • 这里的问题是当TableStorage中的数据增长时,我们可能得到一个 在性能方面受到严重打击。如果TableStorage PK就是这样设计的,它可能会在某个时间点在分区下获得巨大的数据。这导致了查询大量数据的情况。
  • TableStorage也只限制PartitionKey和RowKey的索引;因此,当通过PartitionKey和RowKey访问时,它最有效 - 性能明智。
    • 即使我们通过PartitionKey和RowKey访问(查询),如果存储表的数据结构被设计为具有这样的PartitionKey,仍然会有大量数据。 例如,如果我们在TableStorage中收集10个设备信号细节并设计每个PK以具有相应的SignalID(使得每个信号在分区内分组)==&gt;然后,在一个点上进入Signal的数据在分区内将是巨大的。这反过来又会严重影响性能。