Meilleure pratique pour stocker des données de simulation hiérarchiques


13

TL, DR

Quelle est la meilleure pratique acceptée dans les cercles de calcul scientifique pour stocker de grandes quantités de données structurées hiérarchiquement? Par exemple, SQL ne fonctionne pas bien avec les grandes matrices clairsemées. Existe-t-il un bon outil pour structurer, stocker et analyser ce type de données? Que font les gars du LHC?

Détails du cas d'utilisation

Je souhaite stocker les données des simulations de protéines selon la hiérarchie suivante:

protein
  |__simulation conditions
  |____|__residues
  |____|____|__conformers
  |____|____|____|__atoms

Chaque protéine doit être consciente de chacun de ses résidus, chaque atome doit connaître les conditions utilisées pour sa simulation, etc. et vice versa.

À l'origine, je pensais qu'une base de données relationnelle serait parfaite pour cette application, et j'ai donc écrit un programme utilisant python et sqlalchemey qui stocke les données dans une base de données SQL. Dans la pratique, cependant, ce programme ne fonctionne pas aussi bien.

Le plus gros problème concerne le fait qu'il existe une matrice N x N au niveau des données de conformateur qui stocke l'énergie potentielle en raison des interactions par paire entre chaque paire de conformateurs possible. La plupart des entrées de la matrice sont des zéros, donc je stocke la matrice dans une table distincte dans la base de données dans une sorte de format fragmenté, une ligne par entrée. Malheureusement, pour une simulation impliquant plusieurs milliers de conformistes, le tableau par paire se termine toujours par plusieurs centaines de milliers de lignes et:

a) génère et interroge très lentement (heures)
b) occupe un ordre de grandeur plus d'espace sur mon disque dur qu'une représentation en texte brut équivalente des données sous forme de matrice non clairsemée
c) occupe plus de dix gigaoctets de mémoire lorsque la table est lue en mémoire

Mon objectif ultime est de stocker des dizaines de milliers d'analyses (dérivées de milliers de protéines sous plusieurs dizaines de conditions de simulation) dans la base de données afin qu'elles puissent toutes être analysées ensemble. Cela signifierait que le tableau représentant les matrices par paire passerait probablement à environ un milliard de lignes. Actuellement, il semble que je vais avoir besoin d'un Cray ou d'un autre monstre à mémoire partagée afin d'exécuter même une seule requête sur cette base de données.

Ai-je de meilleures options ici? Que font les gars du LHC?

Réponses:


12

Pensez à utiliser le format de fichier HDF5 . HDF5 est un format de stockage de données hiérarchique avec plusieurs fonctionnalités intéressantes:

  • stockage indépendant de la plateforme: la bibliothèque s'occupe pour vous de la petite / grande endianité
  • disposition hiérarchique des ensembles de données: comme un système de fichiers dans un fichier
  • grande baie de stockage évolutive à n dimensions
  • des types d'ensembles de données mixtes peuvent exister dans un même fichier (c'est-à-dire des entiers, des flottants, etc.)
  • la compression automatique est disponible
  • stockage binaire
  • E / S parallèles

Il existe des interfaces C et Fortran, ainsi que des wrappers Python ( h5py et pytables ). MATLAB peut également lire HDF5. HDF5 est assez flexible, presque à la faute, c'est-à-dire qu'il n'est pas "auto-descriptif", d'où la création de XDMF .

Je ne sais pas exactement ce que vous entendez par "conditions utilisées pour sa simulation", mais s'il ne s'agit que de petites collections de paramètres, vous pouvez les stocker en tant qu'attributs .


3
Les liaisons bidirectionnelles dans HDF5 sont un peu pénibles à maintenir. Étant donné que les formats HDF5 sont de toute façon à mi-chemin, vous pouvez également envisager de conserver les métadonnées dans une base de données relationnelle et de conserver les données les plus lourdes dans des fichiers séparés (HDF5 si vous le souhaitez).
Jed Brown

0

L'utilisation d'une base de données est idéale pour vous aider à organiser / trouver des données de simulation (Recherche par protéine, recherche par paramètres de simulation). La base de données devrait ensuite vous indiquer où trouver les informations pertinentes sur le disque, où j'imagine qu'elles sont probablement mieux stockées pour chaque simulation dans le type de fichier le plus pratique à charger pour l'analyse (que ce soit personnalisé ou à partir de la suite de simulation que vous utilise).

Cela vous permettra de trouver rapidement les simulations que vous souhaitez et vous donnera la liberté / les performances d'utiliser des matrices clairsemées ou tout autre outil dont vous avez besoin pour effectuer une analyse efficace.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.