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

时间:2019-07-17 12:30:24

标签: azure azure-functions azure-cosmosdb azure-table-storage

我正在使用移动设备构建资产跟踪应用程序,该应用程序能够将其坐标定期发布到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(文档+表),Azure表,Data Lake等。有人可以建议最佳的存储方案,可以最大限度地降低我的总体运行成本。还有如何最好地对我的模式进行分片/分区以获得最佳性能。

1 个答案:

答案 0 :(得分:0)

由于您提到主要是要进行地理空间查询,因此我建议将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