【问题标题】:How to make it the most optimal for query search, Mongodb?如何使其成为查询搜索的最佳选择,Mongodb?
【发布时间】:2020-03-19 21:36:00
【问题描述】:

我有一个格式为:

{
    "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,这是否意味着我的读数小于那个?

【问题讨论】:

    标签: python json mongodb parsing


    【解决方案1】:

    我会在 MongoDB 中将数据构造成一个集合readings,其文档架构如下:

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

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

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

    我的方法将每个读数存储为一个小文档。这使得shard 您的数据变得简单,例如如果您的数据对于一台服务器来说太大,则在时间戳上。如果您将所有读数存储在一个文档中(每个传感器),那么点击limit of 16 MB per document 只是时间问题,您将无法在现有文档中添加新读数。这可以通过上述每次阅读一个文档的架构来避免。

    【讨论】:

    • @heyhey:请不要用后续问题来扩展您的问题。这使得更难理解主要问题是什么以及答案的目标是什么。相反,您可以打开一个单独的新问题,并在那里添加有关您的新问题的更多信息。例如您面临的异常或错误消息以及您尝试过的代码。
    猜你喜欢
    • 2017-04-22
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多