1

我们部署了一个 Azure TSI 预览版,用于摄取来自 IoT 中心的消息。当不同类型的设备生成且没有属性交集的事件时,我们正在徘徊什么是最佳实践。

例如,考虑来自 A 类设备的消息:

{
  "timestamp" : "2019-02-25T01:08:00Z",
  "devicetype" : "a",
  "windspeed" : 10,
  "airpressure" : 101300
}

和来自 B 类设备的消息

{
  "timestamp" : "2019-02-25T01:09:00Z",
  "devicetype" : "b",
  "temperature" : 26.5,
  "humidity" : 22.5
}

其中timestamp是用作源时间戳devicetype的列和用作时间序列 ID 的列。

按照文档,并在资源管理器中检查结果事件,结果输出看起来像

  timestamp            | devicetype | windspeed | airpressure | tempearature | humidity 
  2019-02-25T01:08:00Z | a          | 10        | 101300      |              |          
  2019-02-25T01:09:00Z | b          |           |             | 26.5         | 22.5     

在实践中,我们拥有不同类型的设备,它们永远不会共享任何属性。所以,

  • 我们是否会在速度和内存分配(blob)方面获得相同程度的性能?
  • 我们在浪费空间吗?
  • 有没有更好的方式来组织活动?
  • 如果我们更改属性并引入一个公共字段怎么办?

谢谢 :)

4

1 回答 1

1

感谢您对 TSI 的关注。我是团队的高级产品经理。

我相信您组织活动的方式是可以的。您还可以使用诸如propertyType减少列数之类的方法进行优化。例如:

{
"deviceType" : "a"
"propertyType": "humidity"
"value": 22.5
}

这将在您的环境中创建一个表结构,如下所示:

propertyType     value
humidity         22.5
temperature      26.5

该结构将取决于您在环境中拥有的属性数量。在您在线程中发布的示例中,您可以直接通过查询来查询属性。但是,如果您使用我的方法,则需要在查询中使用过滤器(如果您有太多属性,这可能无法为您提供最佳查询性能。)

我希望这能澄清你的问题。如果我能回答更多问题,请告诉我。

于 2019-03-11T06:41:25.467 回答