TLDR
Utilisez Python pour gérer / modifier vos entrées et corail vos sorties, et utilisez HDF5 pour organiser / stocker vos données. Aussi complexe que cela puisse paraître à première vue, il sera toujours plus simple que SQL-n'importe quoi.
Réponse plus longue + Exemple
J'utilise personnellement une combinaison de scripts Python et du format de fichier HDF5 pour faire face à ce genre de situations. Les scripts Python peuvent gérer les substitutions de texte nécessaires pour modifier vos fichiers d'exécution (et peuvent vérifier les exécutions en double), et avec un peu plus de scripts, vous pouvez prendre les données de sortie de votre programme et les placer dans un fichier HDF5.
Il est plus facile de penser à HDF5 comme étant plus ou moins exactement comme un système de fichiers normal (c'est-à-dire l'ensemble des répertoires et sous-répertoires de votre ordinateur), mais qui s'adapte facilement aux grands ensembles de données. Chaque répertoire / sous-répertoire peut être étiqueté avec des métadonnées (dans votre cas, soit uniquement les paramètres que vous modifiez, soit l'ensemble des paramètres). Lorsque vient le temps d'analyser vos données, vous pouvez les parcourir en fonction des métadonnées.
Voici un bref exemple de la façon dont cela fonctionnerait sur la base de certaines de mes données de simulation (déjà au format HDF5) qui ressemblent à ceci:
mydata.hdf5
|___Run01(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run02(metadata: {size:10, maxSteps:1e6, maxTime:inf})
|___Run03(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run04(metadata: {size:9, maxSteps:1e7, maxTime:inf})
mydata.hdf5
est le fichier HDF5, et chacun de Runxx est un sous-répertoire qui contient les données de sortie d'une simulation donnée, et qui est étiqueté avec les métadonnées associées. Un script python qui recherche dans les exécutions et renvoie une liste de ceux avec les métadonnées souhaitées ressemblerait à ceci:
import sys
import h5py #the python module that interfaces with HDF5
def GetRuns(hdfRoot, attributeValuePairs):
return [subdir for subdir in hdfRoot.values() if not(attributeValuePairs.viewitems() - dict(subdir.attrs).viewitems())]
if __name__=="__main__":
attributeValuePairs = dict(zip(sys.argv[2::2], sys.argv[3::2]))
with h5py.File(sys.argv[1]) as hdfRoot:
runs = GetRuns(hdfRoot, attributeValuePairs)
#do something here with runs...
print runs
Donc, si j'étais sur une ligne de commande dans un répertoire contenant mydata.hdf5
je pourrais exécuter le script ci-dessus comme ceci:
python myscript.py mydata.hdf5 maxSteps 1e7 size 13
qui indiquerait au script de trouver toutes les exécutions avec des métadonnées correspondant partiellement ou entièrement {'maxSteps':'1e7', 'size':'13'}
. Le script pourrait alors manipuler ces données comme vous le souhaitez (dans la section "faire quelque chose ici"), puis il imprimerait une liste qui ressemblerait à ceci:
["Run01", "Run03"]
Une note cependant est que HDF5 ne présentera une cartographie totalement naturelle pour vos données que s'il est possible de représenter vos données comme un ensemble de tableaux à n dimensions. Il est assez courant que la sortie des simulations soit dans une sorte de tableau, donc ce ne sera probablement pas un problème.
Bons points de départ
Python: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/