TL, DR
Какова общепринятая практика в научных вычислительных кругах для хранения большого количества иерархически структурированных данных? Например, SQL плохо работает с большими разреженными матрицами. Есть ли хороший инструмент для структурирования, складирования и анализа таких данных? Что используют ребята на LHC?
Использовать детали случая
Я хочу хранить данные моделирования белка в соответствии со следующей иерархией:
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
Каждый белок должен знать о каждом своем остатке, каждый атом должен знать условия, используемые для его моделирования и т. Д., И наоборот.
Первоначально я полагал, что реляционная база данных была бы идеальной для этого приложения, и поэтому я написал программу, использующую python и sqlalchemey, которая хранит данные в базе данных SQL. Однако на практике эта программа работает не так хорошо.
Самая большая проблема связана с тем фактом, что на уровне данных конформера существует матрица N x N, которая хранит потенциальную энергию из-за парных взаимодействий между каждой возможной парой конформеров. Большинство записей в матрице являются нулями, поэтому я храню матрицу в отдельной таблице в базе данных в своего рода разреженном формате, по одной строке на запись. К сожалению, для моделирования, включающего несколько тысяч конформеров, парная таблица все еще заканчивается несколькими сотнями тысяч строк и:
а) очень медленно строит и запрашивает (часы)
б) занимает на порядок больше места на моем жестком диске, чем эквивалентное текстовое представление данных в виде не разреженной матрицы
в) занимает более десяти гигабайт памяти, когда таблица читается в память
Моя конечная цель - сохранить в базе данных десятки тысяч прогонов (полученных из тысяч белков при нескольких десятках условий моделирования), чтобы их можно было анализировать вместе. Это будет означать, что таблица, представляющая попарные матрицы, вероятно, вырастет примерно до миллиарда строк. В настоящее время мне кажется, что мне понадобится Cray или какой-нибудь другой монстр с общей памятью, чтобы даже выполнить один запрос к этой базе данных.
У меня есть варианты получше? Что используют ребята на LHC?