TL, DR
Jaka jest sprawdzona najlepsza praktyka w naukowych kręgach obliczeniowych do przechowywania dużych ilości danych o strukturze hierarchicznej? Na przykład SQL nie działa dobrze z dużymi rzadkimi macierzami. Czy istnieje dobre narzędzie do strukturyzacji, magazynowania i analizy tego rodzaju danych? Czego używają faceci z LHC?
Użyj szczegółów sprawy
Chcę przechowywać dane z symulacji białek zgodnie z następującą hierarchią:
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
Każde białko powinno być świadome każdej swojej reszty, każdy atom powinien znać warunki zastosowane do jego symulacji itp. I odwrotnie.
Początkowo pomyślałem, że relacyjna baza danych byłaby idealna dla tej aplikacji, dlatego napisałem program wykorzystujący Python i sqlalchemey, który przechowuje dane w bazie danych SQL. W praktyce jednak ten program nie działa tak dobrze.
Największy problem dotyczy faktu, że na poziomie danych konformatora istnieje macierz N x N, która przechowuje energię potencjalną ze względu na interakcje parami między każdą możliwą parą konformerów. Większość wpisów w macierzy jest zerowa, więc przechowuję macierz w osobnej tabeli w bazie danych w rodzaju rzadkiego formatu, jeden wiersz na wpis. Niestety, w przypadku symulacji obejmującej kilka tysięcy konformatorów tabela parowania wciąż kończy się na kilkuset tysiącach wierszy i:
a) buduje i wysyła zapytania bardzo powoli (godziny)
b) zajmuje o rząd wielkości więcej miejsca na moim dysku twardym niż równoważna reprezentacja danych w postaci zwykłego tekstu jako macierz niesparowana
c) zajmuje więcej niż dziesięć gigabajtów pamięci, gdy tabela jest wczytywana do pamięci
Moim ostatecznym celem jest przechowywanie dziesiątek tysięcy przebiegów (pochodzących z tysięcy białek w kilkudziesięciu warunkach symulacji) w bazie danych, aby wszystkie mogły być analizowane razem. Oznaczałoby to, że tabela reprezentująca macierze par prawdopodobnie wzrośnie do około miliarda wierszy. Obecnie wydaje się, że potrzebuję Craya lub innego potwora z pamięcią współużytkowaną, aby nawet uruchomić jedno zapytanie w tej bazie danych.
Czy mam tutaj jakieś lepsze opcje? Czego używają faceci z LHC?