ठीक है, इसलिए यह अन्य उत्तरों से कुछ हद तक दूर है, लेकिन ... मुझे यह महसूस होता है कि यदि आपके पास एक निश्चित रिकॉर्ड आकार के साथ फाइल सिस्टम (एक स्टॉक प्रति फ़ाइल, शायद) में डेटा है, तो आप डेटा प्राप्त कर सकते हैं वास्तव में आसानी से: एक विशेष स्टॉक और समय सीमा के लिए एक क्वेरी दी गई, आप सही जगह की तलाश कर सकते हैं, आपको आवश्यक सभी डेटा प्राप्त होंगे (आपको ठीक-ठीक पता होगा कि कितने बाइट्स हैं), डेटा को आपके द्वारा आवश्यक प्रारूप में रूपांतरित करें (जो आप कर सकते थे) आपके भंडारण प्रारूप के आधार पर बहुत जल्दी) और आप दूर हैं।
मुझे अमेज़ॅन स्टोरेज के बारे में कुछ भी नहीं पता है, लेकिन अगर आपके पास डायरेक्ट फाइल एक्सेस जैसी कोई चीज़ नहीं है, तो आप मूल रूप से ब्लब कर सकते हैं - आपको बड़े ब्लब्स (कम रिकॉर्ड) को संतुलित करने की आवश्यकता होगी, लेकिन संभवतः प्रत्येक की आवश्यकता से अधिक डेटा पढ़ना समय) छोटे ब्लब्स के साथ (अधिक रिकॉर्ड जो अधिक उपरि दे रहा है और संभवतः उन पर प्राप्त करने के लिए अधिक अनुरोध करता है, लेकिन हर बार कम बेकार डेटा वापस आ जाता है)।
आगे आप कैशिंग जोड़ते हैं - मैं उदाहरण के लिए विभिन्न सर्वरों को संभालने के लिए अलग-अलग स्टॉक देने का सुझाव दूंगा - और आप बहुत अधिक मेमोरी से सेवा कर सकते हैं। यदि आप पर्याप्त सर्वर पर पर्याप्त मेमोरी खर्च कर सकते हैं, तो "लोड ऑन डिमांड" भाग को बायपास करें और स्टार्ट-अप पर सभी फाइलों को लोड करें। यह धीमी गति से स्टार्ट-अप की लागत पर (जो स्पष्ट रूप से विफलता को प्रभावित करता है, जब तक कि आप किसी विशेष स्टॉक के लिए हमेशा दो सर्वरों को बर्दाश्त नहीं कर सकते , जो सहायक होगा)।
ध्यान दें कि आपको प्रत्येक रिकॉर्ड के लिए स्टॉक प्रतीक, दिनांक या मिनट को संग्रहीत करने की आवश्यकता नहीं है - क्योंकि वे उस फ़ाइल में अंतर्निहित हैं जो आप लोड कर रहे हैं और फ़ाइल के भीतर की स्थिति। आपको यह भी विचार करना चाहिए कि आपको प्रत्येक मूल्य के लिए क्या सटीकता की आवश्यकता है, और उस कुशलता से कैसे स्टोर करें - आपने अपने प्रश्न में 6SF दिया है, जिसे आप 20 बिट्स में स्टोर कर सकते हैं। संभावित रूप से तीन 20-बिट पूर्णांकों को 64 बिट्स स्टोरेज में संग्रहीत करें: इसे एक long
(या जो भी आपके 64-बिट पूर्णांक मान होगा) के रूप में पढ़ें और इसे तीन पूर्णांकों में वापस लाने के लिए मास्किंग / शिफ्टिंग का उपयोग करें। आपको यह जानने की आवश्यकता होगी कि किस पैमाने का उपयोग करना है, निश्चित रूप से - जिसे आप शायद अतिरिक्त 4 बिट्स में सांकेतिक शब्दों में बदलना कर सकते हैं, यदि आप इसे निरंतर नहीं बना सकते हैं।
आपने यह नहीं कहा है कि अन्य तीन पूर्णांक कॉलम क्या हैं, लेकिन यदि आप उन तीनों के लिए 64 बिट्स के साथ भाग सकते हैं, तो आप 16 बाइट्स में एक संपूर्ण रिकॉर्ड संग्रहीत कर सकते हैं। पूरे डेटाबेस के लिए यह केवल ~ 110GB है, जो वास्तव में बहुत ज्यादा नहीं है ...
संपादित करें: विचार करने के लिए दूसरी बात यह है कि संभवतः स्टॉक सप्ताहांत में नहीं बदलता है - या वास्तव में रात भर। यदि शेयर बाजार केवल 8 घंटे प्रति दिन, सप्ताह में 5 दिन खुला रहता है, तो आपको 168 के बजाय प्रति सप्ताह केवल 40 मान चाहिए। उस समय आप अपनी फ़ाइलों में केवल 28GB डेटा के साथ समाप्त हो सकते हैं ... जो लगता है आप से बहुत छोटा शायद मूल रूप से सोच रहे थे। मेमोरी में इतना डेटा होना बहुत ही उचित है।
संपादित करें: मुझे लगता है कि मुझे इस स्पष्टीकरण से चूक हो गई है कि यह दृष्टिकोण यहां क्यों फिट है: आपको अपने डेटा के एक बड़े हिस्से के लिए एक बहुत ही अनुमानित पहलू मिला है - स्टॉक टिकर, दिनांक और समय। टिकर को एक बार (फाइलनाम के रूप में) व्यक्त करके और डेटा की स्थिति में पूरी तरह से निहित तारीख / समय को छोड़कर , आप काम का एक पूरा गुच्छा निकाल रहे हैं। यह String[]
एक Map<Integer, String>
- और के बीच के अंतर की तरह एक सा है - यह जानते हुए कि आपका सरणी सूचकांक हमेशा 0 से शुरू होता है और सरणी की लंबाई तक 1 की वृद्धि में ऊपर जाता है जो त्वरित पहुंच और अधिक कुशल भंडारण की अनुमति देता है।