【问题标题】:How to prevent duplicates in mongodb time series collection如何防止mongodb时间序列集合中的重复
【发布时间】:2021-10-13 21:34:21
【问题描述】:

问题

传感器会定期签入,但网络连接问题可能会导致它们多次签入相同的数据。

MongoDB 不允许在时间序列集合的二级索引上使用 unique 属性 (MongoDB 5.0)。 Timeseries Limitations

此外,需要对涉及计数条目数的数据进行计算(最好使用聚合),如果存在重复,则将不准确。更不用说它会使数据库膨胀并且很乱。

问题

有什么方法可以防止 MongoDB Timeseries 集合中出现重复条目​​?

【问题讨论】:

  • 数据是如何插入DB的?如果它们是通过某些 API 插入的,您可能会考虑在 API 级别进行一些检查/重复数据删除。
  • 有,但效率不高,所以如果可能的话,我想避免这种情况。
  • 我现在也陷入了困境,我想到的最好的事情是使用我记录上的唯一属性进行计数查询,如果计数返回 1,那么我就是尝试插入是重复的。

标签: database mongodb database-design time-series


【解决方案1】:

我也有同样的问题。

根据 MongoDB 社区的官方回答,没有办法确保时间序列集合中的唯一值。

您可以在此处查看完整说明: https://www.mongodb.com/community/forums/t/duplicate-data-issue/135023

与正常收集相比,他们认为这是对时间序列的警告。 IMO,这是 mongodb 时间序列能力的关键缺陷......

目前有两种可用的解决方案:

  1. 在您的时间戳和 sensor_id 字段上使用具有复合唯一索引的“普通”集合
  2. 继续使用时间序列集合,但仅通过具有 $group 阶段的聚合管道查询数据,以消除重复条目

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 2019-05-28
    • 2013-07-08
    • 2018-04-13
    • 1970-01-01
    • 2014-07-30
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多