Я разрабатываю программный пакет для моделирования методом Монте-Карло, в котором задействованы несколько физиков и симуляторов. Мне нужно проводить онлайн-анализ, отслеживать зависимость производных данных от исходных данных и выполнять запросы типа "дайте мне формы волны для температуры>400 и положения около (x0,y0)". Таким образом, модель данных в памяти довольно сложная.
Приложение написано на Python, каждый результат моделирования моделируется как объект Python. За каждый час оно производит ~100 результатов (объектов). Большинство объектов содержат тяжелые данные (несколько МБ двоичных числовых массивов), а также некоторые легкие данные (температура, положение и т.д.). Общая скорость генерации данных составляет несколько ГБ в час.
Мне нужно какое-то решение для сохранения данных и простой в использовании API для запросов. Я уже решил хранить тяжелые данные (числовые массивы) в хранилище(ях) HDF5. Я рассматриваю возможность использования MongoDB для сохранения объектов (только легкие данные) и для индексирования тяжелых данных в HDF5. Персистентность объектов в MongoDB проста, а интерфейс запросов выглядит достаточно мощным.
Я знаю о варианте sqlalchemy+sqlite. Однако потоковая передача тяжелых данных в HDF5 не кажется естественно поддерживаемой в SqlAlchemy, а фиксированная схема громоздка.
Я знаю об этом сообщении( Searching a HDF5 dataset), но сама "индексная таблица" нуждается в некоторых индексах в памяти для быстрого запроса.
Интересно, есть ли альтернативные решения, на которые мне стоит обратить внимание, прежде чем я начну работать? Или есть какая-то проблема, которую я упустил из виду в своем плане?
TIA.