TL, DR
Яка прийнята найкраща практика в наукових обчислювальних колах для зберігання великої кількості ієрархічно структурованих даних? Наприклад, SQL не чудово грає з великими розрідженими матрицями. Чи є хороший інструмент для структуризації, складування та аналізу такого роду даних? Що використовують хлопці в LHC?
Використовуйте реквізити справи
Я хочу зберігати дані з білкового моделювання відповідно до наступної ієрархії:
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
Кожен білок повинен знати про кожен його залишок, кожен атом повинен знати умови, що використовуються для його моделювання тощо, і навпаки.
Спочатку я вважав, що реляційна база даних буде ідеальною для цього додатка, і тому я написав програму, використовуючи python та sqlalchemey, що зберігає дані в базі даних SQL. На практиці, однак, ця програма працює не так добре.
Найбільша проблема пов'язана з тим, що на рівні даних про конформери існує матриця N x N, яка зберігає потенційну енергію через парні взаємодії між кожною можливою парою конформерів. Більшість записів у матриці - нулі, тому я зберігаю матрицю в окремій таблиці бази даних у вигляді розрідженого формату, по одному рядку на запис. На жаль, для моделювання за участю декількох тисяч конформерів таблиця попарно все ще складається з декількох сотень тисяч рядків:
а) будує та запитує дуже повільно (години)
б) займає на порядок більше місця на моєму жорсткому диску, ніж еквівалентне представлення даних у простому тексті у вигляді нерозрідженої матриці;
c) займає більше десяти гігабайт пам'яті, коли таблиця зачитується в пам'ять
Моя кінцева мета - зберігати десятки тисяч пробіжок (отриманих з тисяч білків за декількох десятків умов моделювання) в базі даних, щоб їх можна було аналізувати разом. Це означало б, що таблиця, що представляє парні матриці, ймовірно, виросте приблизно до мільярда рядків. В даний час здається, що мені знадобиться Cray або якийсь інший монстр спільної пам'яті, щоб навіть запустити один запит у цій базі даних.
У мене є якісь кращі варіанти тут? Що використовують хлопці в LHC?