【问题标题】:How MongoDB works for this case?MongoDB 如何在这种情况下工作?
【发布时间】:2021-05-25 21:38:16
【问题描述】:

我对 MongoDB 有疑问,我知道“什么是 mongo”,但我不确定这个数据库是否适合我需要做的需求。好吧,我这就去。

说明: 我需要存储来自设备的一些数据(多或少 200 台设备),这些设备将每 30 秒报告一次地理定位数据(纬度、经度),因此它将是 576.000 个对象/天(2880 个请求 = 每天 1 个设备)

我认为我的文档在“位置”集合中的这种结构

{
"mac": "dc:a6:32:d4:b6:dc",
"company_id": 5,
"locations": [
    {
        "date": "2021-02-23 10:00:02",
        "value": "-32.955465, -60.661143"
    }
]
}

其中 'locations' 是一个数组,每 30 秒存储一次所有位置。

问题:

  1. MongoDB 数据库能做到这一点吗?
  2. 我的文档结构能正确解决这个问题吗?
  3. 当这个数组在一个非常大的月份之后,会发生什么?
  4. 有更好的方法吗? (数据库、框架等)

TIA !!

【问题讨论】:

    标签: mongodb performance database-design architecture nosql


    【解决方案1】:
    1. MongoDB 数据库能做到这一点吗? 是的

    2. 我的文档结构可以解决这个问题吗?没有

    3. 当这个数组在一个非常大的月份之后,会发生什么? BSON 文档的最大大小是 16 兆字节。

    4. 有没有更好的方法来做到这一点? (数据库、框架等) 是的。 The Bucket Pattern 是需要管理物联网 (IoT) 应用程序的绝佳解决方案。

    每台设备每小时可以有一个文档,并且每 30 秒可以有一个位置文档,其中键是流逝。

    {
        "mac": "dc:a6:32:d4:b6:dc",
        "company_id": 5,
        "date": ISODate("2021-02-23T10"),
        "locations": {
            "0": "-32.955465, -60.661143",
            "1": "-33.514655, -60.664143",
            "2": "-33.122435, -59.675685"
        }
    }
    

    根据您的工作负载和系统的主要查询来调整此解决方案。

    【讨论】:

    • 您好 Haniel,非常感谢您的回答,我将阅读有关“桶模式”的更多信息。但我一直在想这个“每个设备每小时可以有一个文档,以及一个位置文档,其中键是每 30 秒的间隔。”。这个解决方案听起来不错,但是: 1- 每小时创建一个文档是一种好习惯吗?这样做的。我每天将获得 4800 个文档(假设我有 200 台设备) 2- 一年后发生了什么? (1752000 个文档) 3- 根据我对 MongoDB 和 NoSQL 的一点经验,我问你:MongoDB 的数据库大小是否正常?
    • 我有一个 MongoDB,每天有 30 亿个文档(提供 5000 万个桶)——所以不要担心你的“可爱”数据库。
    【解决方案2】:
    1. MongoDB 数据库能做到这一点吗?

      是的,这样就可以了。

    2. 我的文档结构可以解决这个问题吗?

      不,一点也不!

      切勿将日期/时间值存储为字符串,这是设计缺陷。始终使用正确的 Date 对象。 (这适用于任何数据库)。

      类似的语句适用于坐标,不要存储为字符串。我推荐一个GeoJSON Objects,然后你也可以在上面创建索引并运行空间查询。示例:location: { type: "Point", coordinates: [ -32.955465, -60.661143 ] }

    3. 当这个数组在一个很大的月份之后,会发生什么?

      MongoDB 中的文档大小不能超过 16MiByte,这是一个固定的限制。所以,它看起来不像一个好的设计。可能每天存储位置,甚至每个报告一个文档。

    4. 有更好的方法吗? (数据库、框架等)

      好吧,问 5 个人,你会得到 6 个答案。至少你的做法没有错。

    【讨论】:

    • Well, ask 5 people and you will get 6 answers. At least your approach is not wrong。太真实了。
    • 谢谢!我会考虑的!
    • @JuanAndres 是投票选出有用答案的好习惯。
    • @HanielBaez 是的,我知道,但我还没有声望。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2017-06-21
    • 2018-01-19
    • 1970-01-01
    • 2021-12-06
    • 2020-12-27
    • 2021-08-31
    相关资源
    最近更新 更多