用于资产位置跟踪的 Azure 存储架构设计

Azure storage schema design for Asset Location Tracking

我正在使用移动设备构建资产跟踪应用程序,该应用程序能够定期将其坐标发布到 Azure 中的 Event Grid

目标

  1. 跟踪此 Asset 在任何给定时间点的位置
  2. 记录其随时间的移动以供将来分析
  3. 当资产接近他们时通知相关人员,比如不到 1 公里。
  4. 将运营成本保持在最低水平。

为此,我计划创建一个 Azure function 来首先注册此设备并为其提供一个 Asset Id,它将包含在活动的 coordinates 中。当事件发生时,我想在多个 Azure function 上订阅这个主题,一个是根据资产 ID 记录事件,另一个是查询附近的个人,以便在资产接近时得到通知。假设资产每 15 秒发布一个事件。

我在这里过度简化了架构,以了解我将捕获的信息类型

Asset-Info:
  AssetId : String
  AssetType: Integer [Track-Movement= 0 , To-Be-Informed = 1]
  RegisteredAddress : String
  ZipCode : String
  MobileNo: String
  APIKey: String
  CurrentLocation: Point

Asset-Movement:
  MovementId : String
  AssetId : String
  MovementCode: Integer
  StartTime : DateTime
  EndTime : DateTime

Asset-Location:
  AssetId: String
  TimeStamp: DateTime
  Location: Point

我正在寻求一些帮助,了解什么是将我的数据存储在 Azure 中的最佳选择,因为有多种选择,例如 CosmosDB(文档 + Table)、Azure Table、 Data Lake 等。有人可以针对这样的要求提出最佳存储模式,以最大限度地降低我的总体 运行 成本。还有如何最好地对我的架构进行分片/分区以获得最佳性能。

既然你提到你主要想做 geo-spatial 查询,我建议你使用 Cosmos DB 作为你的存储部分,因为它对这些查询有很好的支持:https://docs.microsoft.com/en-us/azure/cosmos-db/geospatial

此外,对于进行批量分析——例如在 Azure Databricks 中——还有一个用于 Cosmos DB 的 Spark 连接器:https://docs.microsoft.com/en-us/azure/cosmos-db/spark-connector