如何使它最适合查询搜索,Mongodb?

hey*_*hey 3 python parsing json 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
    ]
}
Run Code Online (Sandbox Code Playgroud)

我有一个包含15个传感器的集合,每个传感器都具有json格式的60万行(在读数列表中占99%),我如何使用mongodb使其最佳化?我是否应该每小时将数据解析到存储桶中?我可以在Python中为此示例json提供一些示例代码吗?您能告诉我在数据查询的读数列表中构造数据的最佳方法是什么?我应该为每个传感器或仅一个桶进行15次采集吗?文档的总大小为16 mb,这是否意味着我的读数小于该值?

Sim*_*ant 5

我将readings使用以下文档架构在MongoDB 中将数据结构化为一个集合:

{
    "location_id": "11670",
    "S1": 3.70,
    "S2": 6.17,
    "humidity": 99.90,
    "temperature": 12.90,
    "timestamp": 1565597520
}
Run Code Online (Sandbox Code Playgroud)

避免将数据存储为字符串,而将Numbers和Number Date用作时间戳记。当限制范围时,这使查询更加容易。另外,您还应该在要过滤查询的字段上创建索引

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

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