Стойкость данных научных данных моделирования, Mongodb + HDF5? - PullRequest
8 голосов
/ 25 января 2012

Я занимаюсь разработкой программного пакета для моделирования Монте-Карло, который включает в себя несколько физиков и симуляторов.Мне нужно провести онлайн-анализ, отследить зависимость производных данных от необработанных данных и выполнить запросы типа «дайте мне кривые для температуры> 400 и положения вблизи (x0, y0)».Таким образом, модель данных в памяти довольно сложна.

Приложение написано на Python, каждый результат моделирования моделируется как объект Python.В каждый час это дает ~ 100 результатов (объектов).Большинство объектов имеют тяжелые данные (несколько МБ двоичного числового массива), а также некоторые легкие данные (температура, положение и т. Д.).Общая скорость генерации данных составляет несколько ГБ в час.

Мне нужно какое-то решение для обеспечения устойчивости данных и простой в использовании API запросов.Я уже решил хранить тяжелые данные (числовой массив) в хранилищах HDF5.Я рассматриваю возможность использования MongoDB как для обеспечения устойчивости объектов (только для легких данных), так и для индексации тяжелых данных в HDF5.Постоянство объектов с MongoDB является простым, а интерфейс запросов выглядит достаточно мощным.

Мне известен вариант sqlalchemy + sqlite.Однако потоковая передача тяжелых данных в HDF5, по-видимому, не поддерживается естественным образом в SqlAlchemy, и фиксированная схема обременительна.

Мне известно об этом сообщении ( Поиск в наборе данных HDF5 ), но«Таблице индексов» сама по себе нужны некоторые индексы в памяти для быстрого запроса.

Интересно, есть ли альтернативные решения, на которые я должен обратить внимание, прежде чем приступить?Или есть какая-то проблема, которую я упустил из своего плана?

TIA.

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Некоторые сведения о Mongo, которые могут иметь отношение к описанной вами ситуации и почему она может подойти:

Мне нужно провести онлайн-анализ, отследить зависимость производных данныхна необработанных данных и выполняйте запросы типа «дайте мне сигналы для температуры> 400 и положения около (x0, y0)».

Mongo имеет гибкий язык запросов, который позволяет очень легко выполнять запросыкак это.Также поддерживаются геопространственные (2D) индексы. Кроме того, если вам нужно выполнять запросы по позиции и температуре очень часто, вы можете создать составной индекс по (температура, позиция), и это обеспечит правильную работу запроса.

Большинство объектов имеют тяжелые данные (несколько МБ двоичного числового массива), а также некоторые легкие данные (температура, положение и т. Д.).

Каждый документ в MongoDB может содержать до16 МБ данных и двоичный тип поля также поддерживаются, поэтому было бы относительно просто внедрить несколько мегабайт двоичного кода в поле и извлечь его, запросив другие поля в данных.Если вам требуется более 16 МБ, вы также можете использовать API-интерфейс GridFS mongodb, который позволяет хранить на диске произвольно большие двоичные объекты двоичных данных и быстро их извлекать.

Общее количество генерируемых данныхскорость составляет несколько ГБ в час.

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

0 голосов
/ 25 января 2012

Вы смотрели на Vistrails ?

...