TLDR
Użyj Pythona do zarządzania / modyfikowania danych wejściowych i łączenia danych wyjściowych, a HDF5 do organizowania / przechowywania danych. Choć początkowo może się to wydawać skomplikowane, nadal będzie prostsze niż SQL-cokolwiek.
Dłuższa odpowiedź + przykład
Osobiście używam kombinacji skryptów Python i formatu pliku HDF5, aby poradzić sobie z tego rodzaju sytuacjami. Skrypty w języku Python mogą obsługiwać podstawienia tekstu niezbędne do zmiany plików wykonywalnych (i mogą sprawdzać, czy są duplikaty), a przy odrobinie skryptów możesz pobrać dane wyjściowe z programu i umieścić je w pliku HDF5.
Najłatwiej jest myśleć o HDF5 jako mniej więcej tak jak normalnym systemie plików (tj. Zestawie katalogów i podkatalogów na komputerze), ale takim, który łatwo skaluje się do dużych zbiorów danych. Każdy katalog / podkatalog może być otagowany metadanymi (w twoim przypadku albo parametry, które zmieniasz, albo cały zestaw parametrów). Kiedy przychodzi czas na analizę danych, możesz je przeszukiwać na podstawie metadanych.
Oto krótki przykład tego, jak to działałoby na podstawie niektórych moich danych symulacyjnych (już w formacie HDF5), który wygląda następująco:
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
jest plikiem HDF5, a każdy z Runxx jest podkatalogiem, który przechowuje dane wyjściowe z danej symulacji i jest oznaczony powiązanymi metadanymi. Skrypt Pythona, który przeszukuje przebiegi i zwraca listę tych z pożądanymi metadanymi, wyglądałby tak:
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
Więc gdybym był w wierszu poleceń w katalogu zawierającym mydata.hdf5
, mógłbym uruchomić powyższy skrypt w następujący sposób:
python myscript.py mydata.hdf5 maxSteps 1e7 size 13
co powiedziałoby skryptowi, aby znalazł wszystkie przebiegi z metadanymi częściowo lub całkowicie pasującymi {'maxSteps':'1e7', 'size':'13'}
. Skrypt może następnie manipulować tymi danymi w dowolny sposób (w sekcji „zrób coś tutaj”), a następnie wydrukuje listę wyglądającą mniej więcej tak:
["Run01", "Run03"]
Jedna uwaga jest jednak taka, że HDF5 przedstawi całkowicie naturalne odwzorowanie dla twoich danych tylko wtedy, gdy będzie możliwe przedstawienie ich jako zestawu tablic n-wymiarowych. Dość często wyniki symulacji są w jakiejś tablicy, więc prawdopodobnie nie będzie to problemem.
Dobre punkty wyjścia
Python: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/