मैं एक MySQL डेटाबेस में मास स्पेक्ट्रोमीटर से स्कैन को स्टोर करने की योजना बना रहा हूं और यह जानना चाहूंगा कि क्या डेटा की इस राशि का भंडारण और विश्लेषण दूरस्थ रूप से संभव है। मुझे पता है कि प्रदर्शन पर्यावरण के आधार पर बेतहाशा भिन्न होता है, लेकिन मैं परिमाण के मोटे क्रम की तलाश कर रहा हूं: क्या प्रश्न 5 दिन या 5 मिली सेकंड लेंगे?
इनपुट प्रारूप
प्रत्येक इनपुट फ़ाइल में स्पेक्ट्रोमीटर का एक रन होता है; प्रत्येक रन में स्कैन का एक सेट शामिल होता है, और प्रत्येक स्कैन में डाटापॉइंट का एक क्रमबद्ध सरणी होता है। मेटाडेटा का एक सा है, लेकिन फ़ाइल का अधिकांश हिस्सा सरणियों 32- या 64-बिट इन्टस या फ़्लोट्स से युक्त है।
मेजबान प्रणाली
| ---------------- + ------------------------------- | | ओएस | विंडोज 2008 64-बिट | | MySQL संस्करण | 5.5.24 (x86_64) | | सीपीयू | 2x Xeon E5420 (कुल 8 कोर) | | राम | 8GB | | एसएसडी फाइल सिस्टम | 500 GiB | | HDD RAID | 12 टीआईबी | | ---------------- + ------------------------------- |
नगण्य प्रोसेसर समय का उपयोग करते हुए सर्वर पर कुछ अन्य सेवाएं चल रही हैं।
फ़ाइल आँकड़े
| ------------------ + -------------- | | फाइलों की संख्या | ~ 16,000 | | कुल आकार | 1.3 टीआईबी | | न्यूनतम आकार | 0 बाइट्स | | अधिकतम आकार | 12 GiB | | मतलब | 800 MiB | | मंझला | 500 MiB | | कुल आंकड़ें | ~ 200 बिलियन | | ------------------ + -------------- |
डेटापॉइंट्स की कुल संख्या बहुत मोटा अनुमान है।
प्रस्तावित स्कीमा
मैं चीजों को "सही" (यानी पागल की तरह डेटा को सामान्य) कर रहे हैं और इसलिए एक के लिए होता है पर योजना बना रहा हूँ runs
मेज, एक spectra
के लिए एक विदेशी कुंजी के साथ तालिका runs
, और एक datapoints
के लिए एक विदेशी कुंजी के साथ तालिका spectra
।
200 बिलियन डेटापॉइंट सवाल
मैं कई स्पेक्ट्रा और संभवत: कई रनों का विश्लेषण करने जा रहा हूं, जिसके परिणामस्वरूप क्वेरीज़ लाखों पंक्तियों को छू सकती हैं। मैं सब कुछ ठीक से अनुक्रमण करता हूं (जो एक और प्रश्न के लिए एक विषय है) और नेटवर्क भर में सैकड़ों MiB को फेरबदल करने की कोशिश नहीं कर रहा हूं, क्या इसे संभालने के लिए MySQL के लिए दूरस्थ रूप से प्रशंसनीय है?
अतिरिक्त जानकारी
स्कैन डेटा XML- आधारित mzML प्रारूप में फाइलों से आ रहा होगा
। इस प्रारूप का मांस उन
<binaryDataArrayList>
तत्वों में है जहां डेटा संग्रहीत किया जाता है। प्रत्येक स्कैन> = 2 <binaryDataArray>
तत्वों का उत्पादन करता है , जो एक साथ लिया जाता है, फॉर्म के 2-आयामी (या अधिक) सरणी बनाते हैं [[123.456, 234.567, ...], ...]
।
ये डेटा एक बार लिखे गए हैं, इसलिए अपडेट प्रदर्शन और लेनदेन सुरक्षा चिंता का विषय नहीं हैं।
एक डेटाबेस स्कीमा के लिए मेरी भोली योजना है:
runs
तालिका
| स्तंभ का नाम | प्रकार | | ------------- + ------------- | | आईडी | प्राथमिक कुंजी | | start_time | TIMESTAMP | | नाम | VARCHAR | | ------------- + ------------- |
spectra
तालिका
| स्तंभ का नाम | प्रकार | | ---------------- + ------------- | | आईडी | प्राथमिक कुंजी | | नाम | VARCHAR | | सूचकांक | INT | | स्पेक्ट्रम_टाइप | INT | | प्रतिनिधित्व | INT | | run_id | विदेश का प्रमुख | | ---------------- + ------------- |
datapoints
तालिका
| स्तंभ का नाम | प्रकार | | ------------- + ------------- | | आईडी | प्राथमिक कुंजी | | स्पेक्ट्रम_ड | विदेश का प्रमुख | | mz | DOUBLE | | num_counts | DOUBLE | | सूचकांक | INT | | ------------- + ------------- |
क्या यह उचित है?
इसलिए, जैसा कि आप अनुमान लगा सकते हैं, मैं प्रोग्रामर हूं, लैब में जीवविज्ञानी नहीं हूं, इसलिए मैं विज्ञान के साथ-साथ वास्तविक वैज्ञानिकों को भी नहीं जानता हूं।
यहां एक एकल स्पेक्ट्रम (स्कैन) का एक प्रकार का डेटा है, जिसके साथ मैं काम करूंगा:
सॉफ़्टवेयर का लक्ष्य यह पता लगाना है कि चोटियाँ कहाँ और कितनी महत्वपूर्ण हैं। हम अब इसका पता लगाने के लिए एक मालिकाना सॉफ्टवेयर पैकेज का उपयोग करते हैं, लेकिन हम अपना विश्लेषण कार्यक्रम (आर में) लिखना चाहते हैं, इसलिए हम जानते हैं कि चादरों के नीचे क्या हो रहा है। जैसा कि आप देख सकते हैं, डेटा का विशाल बहुमत निर्बाध है, लेकिन हम संभावित रूप से उपयोगी डेटा को बाहर नहीं फेंकना चाहते हैं जो हमारे एल्गोरिथ्म में छूट गया है। एक बार हमारे पास संभावित चोटियों की एक सूची है, जिसके साथ हम संतुष्ट हैं, बाकी पाइपलाइन डेटापॉइंट की कच्ची सूची के बजाय उस शिखर सूची का उपयोग करेगी। मुझे लगता है कि कच्चे डाटापॉइंट्स को एक बड़ी बूँद के रूप में संग्रहीत करने के लिए पर्याप्त होगा, इसलिए यदि आवश्यक हो तो उन्हें फिर से लगाया जा सकता है, लेकिन केवल चोटियों को अलग डेटाबेस प्रविष्टियों के रूप में रखें। उस मामले में, प्रति स्पेक्ट्रम केवल दो दर्जन चोटियां होंगी, इसलिए पागल स्केलिंग सामान कंधे चाहिए '