参考 > 资料模型 > 数据模型示例和模式 > 模型特定的应用程序上下文 > 模型时间数据
在本页面
MongoDB 默认将时间存储在UTC中,并将所有本地时间表示形式转换为这种形式。必须对某个未修改的本地时间值进行操作或报告的应用程序可以将时区与UTC时间戳一起存储,并在其应用程序逻辑中计算原始本地时间。
组织时间序列数据的一种常用方法是将数据分组到多个存储桶中,其中每个存储桶代表统一的时间单位,例如一天或一年。存储桶组织特定的数据组以帮助:
考虑一个存储从传感器获得的温度数据的集合。传感器每分钟记录一次温度,并将数据存储在名为temperatures
:
这种方法在数据和索引大小方面无法很好地扩展。例如,如果应用程序需要在sensor_id
和
timestamp
字段上建立索引,则需要对来自传感器的每个传入读数进行索引,以提高性能。
您可以利用文档模型将数据存储到保存特定时间跨度的文档中。考虑以下更新的架构,该架构将每分钟获取的读数存储在一个小时的组中:
此更新的架构提高了可伸缩性,并反映了应用程序实际使用数据的方式。用户可能不会查询特定的温度读数。相反,用户可能会在一个小时或一天的时间内查询温度行为。桶模式通过将数据分组为统一的时间段来帮助简化这些查询。
该实例文档包含两个计算字段:transaction_count
和sum_temperature
。如果应用程序经常需要检索给定时间的温度总和,则计算该总和的运行总计可以帮助节省应用程序资源。这种计算模式方法无需在每次请求数据时都计算总和。
预先汇总的sum_temperature
和transaction_count
值可以进行进一步的计算,例如特定铲斗的平均温度(sum_temperature
/ transaction_count
)。用户更有可能向应用程序查询2:00和3:00 PM之间的平均温度,而不是查询2:03 PM的特定温度。通过存储和预先计算某些值,应用程序可以更轻松地提供该信息。
除时间序列数据外,存储桶模式对于物联网项目很有用,在该项目中,您拥有来自许多不同来源的多个数据集。将数据存储到组中(例如基于设备类型或系统)有助于更轻松地检索和解析数据。
在金融应用程序中,存储桶模式也通常用于按类型,日期或客户对交易进行分组。