TP, DR
Bilimsel hesaplama çevrelerinde, büyük miktarlarda hiyerarşik olarak yapılandırılmış verilerin depolanması için kabul edilen en iyi uygulama nedir? Örneğin, SQL büyük seyrek matrislerle iyi oynamaz. Bu tür verileri yapılandırmak, depolamak ve analiz etmek için iyi bir araç var mı? LHC'deki çocuklar ne kullanıyor?
Vaka ayrıntılarını kullan
Aşağıdaki hiyerarşiye göre protein simülasyonlarından veri depolamak istiyorum:
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
Her protein, kalıntılarının her birinin farkında olmalıdır, her atom, simülasyonu için kullanılan koşulları vb. Bilmelidir ve bunun tersi de geçerlidir.
Başlangıçta ilişkisel bir veritabanının bu uygulama için mükemmel olacağını düşündüm ve bu yüzden verileri bir SQL veritabanında saklayan python ve sqlalchemey kullanarak bir program yazdım. Ancak uygulamada, bu program çok iyi çalışmıyor.
En büyük sorun, uyumlu her veri çifti arasındaki ikili etkileşimler nedeniyle potansiyel enerjiyi depolayan, uyumlu veri düzeyinde bir N x N matrisinin bulunmasıyla ilgilidir. Matristeki girişlerin çoğu sıfırdır, bu yüzden matrisi veritabanında ayrı bir tabloda seyrek formatta, giriş başına bir satır saklıyorum. Ne yazık ki, birkaç bin konformer içeren bir simülasyon için ikili tablo hala birkaç yüz bin satır ile sonuçlanıyor ve:
a) çok yavaş inşa eder ve sorgular (saat)
b) sabit diskimde, seyrek olmayan bir matris olarak verilerin eşdeğer düz metin sunumundan çok daha fazla yer kaplar
c) on gigabayttan fazla bellek alır tablo belleğe okunur
Nihai hedefim, onbeş koşuyu (birkaç düzine simülasyon koşulu altında binlerce proteinden türetilmiş) veritabanında depolamaktır, böylece hepsi birlikte analiz edilebilir. Bu, çift matrisleri temsil eden tablonun muhtemelen bir milyar satıra çıkacağı anlamına gelir. Şu anda bu veritabanında tek bir sorgu çalıştırmak için bir Cray veya başka bir paylaşılan bellek canavarına ihtiyacım var gibi görünüyor.
Burada daha iyi seçeneklerim var mı? LHC'deki çocuklar ne kullanıyor?