Структура реляционной базы данных для минимизации времени поиска - PullRequest
0 голосов
/ 27 февраля 2019

Я много работаю с данными повторного анализа, такими как MERRA НАСА.Эти данные загружаются в формате netCDF.Размеры - это долгота, широта и время, и существуют различные переменные, такие как температура, скорость ветра и т. Д. Существует один файл для всех предварительно выбранных координат и переменных в день.Временное разрешение составляет одно наблюдение в час, т. Е. Один файл содержит 24 наблюдения на переменную.

Типичным рабочим процессом будет: При фиксированном местоположении (характеризуемом долготой и широтой) извлечь временные ряды температуры для этого местоположения из01/1990–12/1995.

Поскольку слишком медленно открывать 365 * 6 файлов netCDF [с 01/1990 по 12/1995], выберите координаты, извлеките переменную температуры и объедините, я попыталсяхранить все загруженные данные в реляционной базе данных [MySQL].Моей первой наивной попыткой было сохранить все данные в одной таблице и создать индекс по долготе и широте.Затем запрос просто извлекает все наблюдения для данной пары координат и временного диапазона.Это было ДЕЙСТВИТЕЛЬНО медленно, так как в этой таблице было несколько миллионов наблюдений, и мне нужно было получить около 180 000 за запрос.Тогда я решил создать одну таблицу для каждой пары координат, содержащую полную серию времени.Учитывая координаты, было легко выбрать таблицу и запросить временной диапазон.Это было намного быстрее, но теперь было более 1300 таблиц, и в целом мне казалось, что я не использую базу данных так, как это было задумано.

Мой вопрос: какой разумный способструктурировать реляционную базу данных для обеспечения быстрых запросов в этом сценарии?Я использовал MySQL, но мой вопрос не относится к этой РСУБД.Будут ли базы данных no-sql разумной альтернативой?

Заранее большое спасибо за любые отзывы.

...