Лучший способ хранения данных о температуре в mongodb

#mongodb

#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"
          },
          "..."
        }
      }
    }
  

Любая помощь была бы отличной.

Ответ №1:

  • Эта структура кажется хорошей

:

  {
          "_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 используют пространство повторно для каждой записи.
Но поскольку ваши данные не будут представлять собой миллионы документов, вы можете использовать «январь», «февраль». Возможно, вы захотите использовать «jan», «feb», «mar», чтобы имена ключей были короче, а также описательными.

  • Теперь вам следует учитывать, какие запросы вы будете выполнять к своим данным. например.

    а) В каком городе была максимальная температура воздуха в марте?
    б) Во всех каких городах максимальная температура была от 8 до 12?

    c) В каком городе была максимальная средняя минимальная температура в течение года? и т. Д

Вы получите некоторые результаты с прямыми запросами и правильной индексацией, но, возможно, придется использовать map reduce для расширенных потребностей в данных. Надеюсь, это поможет.

Ответ №2:

Любой из них будет хорош. или вы можете использовать это:

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

вместо этого используйте array. Конечно, 0 = январь.

Это зависит от того, будете ли вы делать это больше, climate.air.january или вы будете делать цикл и делать это больше: climate.air[0]

Комментарии:

1. Спасибо за ответ. Но есть ли какие-то преимущества в использовании структуры массива, о которой вы упомянули?