首页 > 解决方案 > 如何使其成为查询搜索的最佳选择,Mongodb?

问题描述

我有一个格式为:

{
    "location_id": "11670",
    "readings": [
        {
            "S1": "10.77",
            "S2": "7.20",
            "humidity": "99.90",
            "temperature": "12.80",
            "timestamp": "1565597160"
        },
        {
            "S1": "3.70",
            "S2": "6.17",
            "humidity": "99.90",
            "temperature": "12.90",
            "timestamp": "1565597520"
        },
      ....
      600 000 lines
    ]
}

我有一个包含 15 个传感器的集合,每个传感器都有 600 000 行(读数列表中的 99%)的 json 格式,我怎样才能使它最适合使用 mongodb 进行搜索?我应该每小时将数据解析到存储桶中吗?我可以在 python 中为这个示例 json 提供一些示例代码吗?您能告诉我在数据查询的读数列表中构建数据的最佳方式是什么吗?我应该为每个传感器收集 15 个集合还是只收集存储桶?文档的总量也是 16 mb,这是否意味着我的读数小于那个?

标签: pythonjsonmongodbparsing

解决方案


我会将数据构建到readingsMongoDB 中的一个集合中,其文档架构如下:

{
    "location_id": "11670",
    "S1": 3.70,
    "S2": 6.17,
    "humidity": 99.90,
    "temperature": 12.90,
    "timestamp": 1565597520
}

避免将数据存储为字符串,而是使用双精度数和Date时间戳记。这使得限制范围时的查询更容易。此外,您应该在要过滤查询的字段上创建索引。

如果您计划将来添加更多传感器,我认为当您将location_idas 字段存储在文档中并仅使用一个集合时,您的架构会更加灵活。否则,在添加新位置时,您总是必须添加新集合。

我的方法将每个读数存储为一个小文档。如果您的数据对于一台服务器来说太大,这使得对您的数据进行分片变得很简单,例如在时间戳上。如果您将所有读数存储在一个文档中(每个传感器),那么当您达到每个文档 16 MB 的限制时只是时间问题,您将无法向现有文档添加新读数。这可以通过上述每次阅读一个文档的模式来避免。


推荐阅读