Лучший способ хранить данные о температуре в mongodb - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть вопрос относительно данных о температуре: С 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 голосов
/ 05 ноября 2011
  • Эта структура кажется хорошей

 {
          "_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?

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

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

0 голосов
/ 05 ноября 2011

Либо один будет хорошим. или вы можете иметь это:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...