Azure 时间序列 (TSI) 初始注意事项和最佳实践

Azure Time Series (TSI) initial considerations and best practices

对于糟糕的标题,我深表歉意!

我正处于设计 Azure 时间序列解决方案的初始阶段,我 运行 面临许多不确定性。进入 TSI 的背景是我们目前有一个设计相当糟糕的 cosmos db,其中包含接近 1TB 的 IoT 数据,并且它每分钟都在增长。 "badly" 我的意思是分区键的设计方式使我们无法控制分区的大小。知道有 10GB(?)pr 分区键的限制,我们很快就会 运行 超出 space 并且需要提出一个新的解决方案。此外,当对 cosmos db 进行 运行ning 历史查询时,它不会在可接受的时间范围内做出响应。任何有关吞吐量计算和更改的实验都不会将响应时间缩短到可接受的时间范围。

我们的业务是记录物联网时间序列数据,包括来自不同传感器的元数据。我们有许多客户,每个客户都有 30 到 300 个传感器——大小客户都有。在客户端,传感器被分组到位置和 sub-locations.

一个事件的例子可能是这样的:

{
  deviceId,
  datetime,
  clientId,
  locationId,
  sub-locationId,
  sensor,
  value,
  metadata{}
}

知道如何在 CosmosDB 中更好地设计分区键,在 TSI 中编写 TimeSeriesId 时,是否可以将下文所述的相同方法视为良好做法?

或者 TSI 会以不同方式处理时间序列数据,从而使 TimeSeriesId 中的日期部分过时吗?

考虑到 TSI API 查询,我是否也应该考虑组合 TimeSeriesId 的简单性?必须在每个 API 请求的 body 中提供 TimeSeriesId - 据我所知,在 back-end 服务中编写查询时,我确实可以访问我们所有的客户id 和 location/sub-location id。而且这些比 deviceId 的

更容易访问

最后,在为多个客户端存储 IoT 数据时,最佳做法是为每个客户端提供新的 TSI 解决方案,还是 TSI 支持 collections(如 CosmosDB 中所示)?

this article 所述,使用复合键时,您需要查询所有键属性,而不是其中一个或部分属性。在决定使用单键或复合键时,这是一个考虑因素。此外,正如文章中所述,作为提示,

If your event source is an IoT hub, your Time Series ID will likely be iothub-connection-device-id.

因此,我假设您至少有一个 IoT 中心来获取设备报告的事件,在这种情况下,您可以使用 iothub-connection-device-id .