TLDR
Gunakan Python untuk mengelola / memodifikasi input Anda dan menambahkan output Anda, dan menggunakan HDF5 untuk mengatur / menyimpan data Anda. Sekompleks kelihatannya pada awalnya itu masih akan lebih sederhana daripada SQL-apa pun.
Jawaban yang lebih panjang + Contoh
Saya pribadi menggunakan kombinasi skrip Python dan format file HDF5 untuk menangani situasi semacam ini. Skrip python dapat menangani substitusi teks yang diperlukan untuk mengubah runfile Anda (dan dapat memeriksa duplikat run), dan dengan beberapa skrip lainnya Anda dapat mengambil data output dari program Anda dan memasukkannya ke file HDF5.
Sangat mudah untuk menganggap HDF5 kurang lebih persis seperti sistem file normal (yaitu sekumpulan direktori dan subdirektori pada komputer Anda), tetapi yang dapat dengan mudah diubah ke set data besar. Setiap direktori / subdirektori dapat ditandai dengan metadata (dalam kasus Anda, hanya parameter yang Anda variasikan, atau seluruh rangkaian parameter). Ketika tiba saatnya untuk menganalisis data Anda, Anda dapat mencari berdasarkan data metadata.
Berikut adalah contoh singkat bagaimana ini akan bekerja berdasarkan pada beberapa data simulasi saya (sudah dalam format HDF5) yang terlihat seperti ini:
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
adalah file HDF5, dan masing-masing Runxx adalah subdirektori yang menyimpan data output dari simulasi yang diberikan, dan yang ditandai dengan metadata terkait. Skrip python yang mencari melalui proses dan mengembalikan daftar orang-orang dengan metadata yang diinginkan akan terlihat seperti ini:
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
Jadi jika saya berada di baris perintah di direktori yang berisi mydata.hdf5
saya bisa menjalankan skrip di atas seperti:
python myscript.py mydata.hdf5 maxSteps 1e7 size 13
yang akan memberi tahu skrip untuk menemukan menjalankan dengan metadata sebagian atau seluruhnya cocok {'maxSteps':'1e7', 'size':'13'}
. Skrip kemudian dapat memanipulasi data tersebut sesuai keinginan Anda (di bagian "lakukan sesuatu di sini"), dan kemudian akan mencetak daftar yang akan terlihat seperti ini:
["Run01", "Run03"]
Namun satu catatan adalah bahwa HDF5 akan menghadirkan pemetaan yang benar-benar alami untuk data Anda hanya jika memungkinkan untuk merepresentasikan data Anda sebagai satu set array n-dimensi. Ini cukup umum untuk output simulasi berada dalam semacam array, jadi ini mungkin tidak akan menjadi masalah.
Poin awal yang bagus
Python: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/