Я ищу удобный способ хранить и запрашивать огромное количество метеорологических данных (несколько ТБ). Подробнее о типе данных посередине вопроса.
Раньше я искал в направлении MongoDB (я использовал его во многих своих предыдущих проектах и чувствую себя комфортно с ним), но недавно я узнал о HDF5. Читая об этом, я обнаружил некоторое сходство с Mongo:
HDF5 упрощает файловую структуру и включает только два основных типа объектов: наборы данных, которые представляют собой многомерные массивы однородного типа, группы, представляющие собой контейнерные структуры, которые могут содержать наборы данных и другие группы. Это приводит к действительно иерархическому формату данных, подобному файловой системе. Метаданные хранятся в виде определенных пользователем именованных атрибутов, прикрепленных к группам и наборам данных.
Это похоже на массивы и встроенные объекты в Mongo, а также поддерживает индексы для запроса данных.
Поскольку он использует B-деревья для индексации табличных объектов, HDF5 хорошо работает для данных временных рядов, таких как ряды цен на акции, данные сетевого мониторинга и трехмерные метеорологические данные.
Данные:
Конкретный регион разделен на более мелкие квадраты. На пересечении каждого датчика находится (точка).
Этот датчик каждые X минут собирает следующую информацию:
- солнечная светимость
- местоположение и скорость ветра
- влажность
- и так далее (эта информация в основном совпадает, иногда датчик не собирает всю информацию)
Он также собирает их для разной высоты (0 м, 10 м, 25 м). Не всегда высота будет одинаковой. Также у каждого датчика есть какая-то метаинформация:
- название
- широта, долгота
- это в воде, и многие другие
Учитывая это, я не ожидаю, что размер одного элемента будет больше 1 МБ. Также у меня достаточно места для хранения всех данных в одном месте (насколько я понял, шардинг не требуется)
Операции с данными. Я собираюсь взаимодействовать с данными несколькими способами:
конвертировать как хранить большой объем данных: несколько ТБ данных будут предоставлены мне в качестве определенного момента времени в netcdf формат, и мне нужно будет их сохранить (а преобразовать его в HDF5 относительно легко). Затем будут предоставляться периодически меньшие части данных (1 Гб в неделю), и я должен добавлять их в хранилище. Просто подчеркну: у меня достаточно места для хранения всех этих данных на одном компьютере.
запросить данные. Часто возникает необходимость запрашивать данные в режиме реального времени. Чаще всего используются следующие запросы: скажите мне температуру датчиков из определенного региона за определенное время, покажите мне данные с определенного датчика за определенное время, покажите мне ветер для некоторого региона за определенный промежуток времени. Агрегированные запросы (какова средняя температура за последние два месяца) маловероятны. Я думаю, что Mongo вполне подходит, но альтернативой является hdf5 + pytables.
выполнить статистический анализ. В настоящее время я не знаю, что именно это будет, но знаю, что это не должно происходить в реальном времени. Поэтому я подумал, что использование hadoop с mongo может быть хорошей идеей, но hdf5 с R - разумный альтернатива.
Я знаю, что вопросы о лучшем подходе не приветствуются, но я ищу совета у опытных пользователей. Если у вас есть вопросы, я буду рад на них ответить и буду благодарен за вашу помощь.
PS Я просмотрел несколько интересных обсуждений, похожих на мою: hdf-forum, поиск в hdf5, сохранение метеорологических данных