在mongodb中存储温度数据的最佳方法

时间:2011-11-04 21:10:38

标签: mongodb

我对温度数据有疑问: 使用mysql我存储温度数据如下:

city_id;city_name;month;min_temperature,max_temperature
123,New York,1,7,9

现在我想转移到mongodb并希望存储面向数据文档 结构现在看起来像这样:

{
  "_id" : 20480,
  "name": "New York"
  "climate" : {
    "air" : {
      "1" : {
        "min" : "1",
        "max" : "8"
      },
      "2" : {
        "min" : "2",
        "max" : "8"
      },
      "3" : {
        "min" : "3",
        "max" : "10"
      },
      "..."
    }
  }
}

是否有人对该结构有一些经验或有任何优化这方面的技巧? 这种结构是否有意义,或者这样做会更好:

{
      "_id" : 20480,
      "name": "New York"
      "climate" : {
        "air" : {
          "january" : {
            "min" : "1",
            "max" : "8"
          },
          "february" : {
            "min" : "2",
            "max" : "8"
          },
          "march" : {
            "min" : "3",
            "max" : "10"
          },
          "..."
        }
      }
    }

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

任何一个都会很好。 或者你可以这样:

"air" : [{min:1,max:5},{min:2,max:6}, {min:5,max:15} ... ]

使用数组代替。当然,0 = 1月。

这取决于你是否更多地这样做,气候.air.january或你会做一个循环并做更多:climate.air [0]

答案 1 :(得分:0)

  • 这个结构似乎很好

 {
          "_id" : 20480,
          "name": "New York"
          "climate" : {
            "air" : {
              "january" : {
                "min" : "1",
                "max" : "8"
              },
              "february" : {
                "min" : "2",
                "max" : "8"
              },
              "march" : {
                "min" : "3",
                "max" : "10"
              },
              "..."
            }
          }
        }

这在文档中清楚地表明了数据的月份,使用“1”,“2”等可以节省一些磁盘空间,因为mongoDb键会为每条记录重复使用空间。 但是由于你的数据不会是数百万的文件,你可以使用“january”,“february”。您可能希望使用“jan”,“feb”,“mar”来保持键名更短和描述性。

  • 现在,您需要考虑对数据进行何种查询。例如

    a)3月份哪个城市有最高气温? b)哪个城市的最高温度在8到12之间?

    c)哪个城市全年最高平均最低温度?等

您将通过直接查询和正确索引获得一些结果,但可能必须使用map reduce来满足高级数据需求。 希望这会有所帮助。