Taramaları bir MySQL veritabanında bir kütle spektrometresinden depolamayı planlıyorum ve bu miktarda veriyi depolamanın ve analiz etmenin uzaktan uygulanabilir olup olmadığını bilmek istiyorum. Performansın çevreye bağlı olarak çılgınca değiştiğini biliyorum, ancak sert bir büyüklük sırası arıyorum: sorgular 5 gün veya 5 milisaniye mi sürer?
Giriş formatı
Her giriş dosyası tek bir spektrometre çalıştırması içerir; Her çalıştırma bir dizi taramadan oluşur ve her tarama sıralı bir veri noktası dizisine sahiptir. Bir miktar meta veri var, ancak dosyanın çoğu 32 veya 64 bitlik veya kayan dizilerden oluşuyor.
Sunucu sistemi
| ---------------- + ------------------------------- | | OS | Windows 2008 64 bit | | MySQL versiyonu | 5.5.24 (x86_64) | | CPU | 2x Xeon E5420 (toplam 8 çekirdek) | | RAM | 8GB | | SSD dosya sistemi | 500 GiB | | HDD RAID | 12 TiB | | ---------------- + ------------------------------- |
İhmal edilebilir işlemci süresini kullanarak sunucuda çalışan başka hizmetler de var.
Dosya istatistikleri
| ------------------ + -------------- | | dosya sayısı | ~ 16.000 | | toplam boyut | 1.3 TiB | | min boyutu | 0 bayt | | maksimum boyut | 12 GiB | | ortalama | 800 MiB | | ortanca | 500 MiB | | toplam veri noktaları | ~ 200 milyar | | ------------------ + -------------- |
Toplam veri noktası sayısı çok kaba bir tahmindir.
Önerilen şema
Ben (yani deli gibi veriler normalize) şeyler "hakkı" yapıyor olurdu böylece ve planlıyorum runs
masa, spectra
bir yabancı anahtarla tablo runs
ve datapoints
bir yabancı anahtar ile masaya spectra
.
200 Milyar veri noktası sorusu
Milyonlarca satıra dokunabilecek sorgular ortaya çıkaran çoklu spektrumlar ve muhtemelen çoklu işlemler boyunca analiz edeceğim. Her şeyi düzgün bir şekilde dizine eklediğimi (başka bir soru için bir konu olan) ve yüzlerce MiB'yi ağda karıştırmaya çalışmadığımı varsayarsak, MySQL'in bunu ele alması uzaktan mümkün mü?
ilave bilgi
Tarama verileri, XML tabanlı mzML biçimindeki dosyalardan
gelecektir . Bu formatın eti
<binaryDataArrayList>
, verilerin depolandığı öğelerdedir. Her tarama <binaryDataArray>
, birlikte alındığında formun 2 boyutlu (veya daha fazla) bir dizisini oluşturan> = 2 öğeleri üretir [[123.456, 234.567, ...], ...]
.
Bu veriler bir kez yazılır, bu nedenle güncelleme performansı ve işlem güvenliği kaygı verici değildir.
Bir veritabanı şeması için saf planım:
runs
tablo
| sütun adı | türü | | ------------- + ------------- | | id | İLK ANAHTAR | | start_time | TIMESTAMP | | adı | VARCHAR | | ------------- + ------------- |
spectra
tablo
| sütun adı | türü | | ---------------- + ------------- | | id | İLK ANAHTAR | | adı | VARCHAR | | dizin | INT | | spectrum_type | INT | | temsil | INT | | run_id | YABANCI ANAHTAR | | ---------------- + ------------- |
datapoints
tablo
| sütun adı | türü | | ------------- + ------------- | | id | İLK ANAHTAR | | spectrum_id | YABANCI ANAHTAR | | mz | ÇİFT | | num_counts | ÇİFT | | dizin | INT | | ------------- + ------------- |
Bu mantıklı mı?
Dolayısıyla, çıkarım yapmış olabileceğiniz gibi, ben laboratuardaki biyolog değil programcıyım, bu yüzden bilimi neredeyse gerçek bilim adamları kadar tanımıyorum.
İşte ilgileneceğim veri türünün tek bir spektrumunun (taraması) gösterimi:
Yazılımın amacı, zirvelerin nerede ve ne kadar önemli olduğunu bulmaktır. Bunu şimdi çözmek için özel bir yazılım paketi kullanıyoruz, ancak kendi analiz programımızı (R'de) yazmak istiyoruz, böylece haltların altında neler olup bittiğini biliyoruz. Görebildiğiniz gibi, verilerin büyük çoğunluğu ilgi çekici değildir, ancak algoritmamızın kaçırdığı potansiyel olarak yararlı verileri çıkarmak istemiyoruz. Memnun olduğumuz muhtemel zirvelerin bir listesi elimize geçtiğinde, boru hattının geri kalanı ham veri noktaları listesinden ziyade bu zirve listesini kullanacaktır. Ham veri noktalarını büyük bir blok olarak saklamanın yeterli olacağını varsayalım, böylece gerektiğinde yeniden analiz edilebilirler, ancak sadece zirveleri ayrı veri tabanı girişleri olarak tutarlar. Bu durumda, spektrum başına sadece birkaç düzine tepe olacaktır, bu yüzden çılgın ölçekleme maddeleri