मेरे पास निम्नलिखित चुनौती है:बहु-संसाधन वातावरण में फ़ाइलों को पढ़ने का सबसे तेज़ तरीका? सी #
मेरे पास कई उदाहरणों के साथ एक Azure क्लाउड वर्कर भूमिका है। हर मिनट, प्रत्येक उदाहरण लगभग 20-30 धागे फैलता है। प्रत्येक थ्रेड में, इसे 3 ऑब्जेक्ट्स से थ्रेड को संसाधित करने के तरीके के बारे में कुछ मेटाडेटा पढ़ने की आवश्यकता होती है। वस्तुओं/डेटा रिमोट RavenDb में रहते हैं और भले ही RavenDb HTTP के माध्यम से ऑब्जेक्ट्स को पुनर्प्राप्त करने में बहुत तेज़ है, फिर भी यह 30+ श्रमिकों से काफी भार में है जो प्रति मिनट प्रति थ्रेड 3 बार मार रहे हैं (लगभग 45 अनुरोध/सेकंड)। अधिकांश समय (जैसे 99.9 99%) रावेनडीबी में डेटा नहीं बदलता है।
मैंने स्थानीय स्टोरेज कैशिंग को लागू करने का निर्णय लिया है। सबसे पहले, मैंने एक छोटा रिकॉर्ड पढ़ा जो इंगित करता है कि मेटाडेटा बदल गया है (यह बहुत ही कम हो जाता है), और फिर स्थानीय स्टोरेज में ऑब्जेक्ट कैश किया गया है, तो मैं RavenDb के बजाय स्थानीय फ़ाइल संग्रहण से पढ़ता हूं। मैं File.ReadAllText()
का उपयोग कर रहा हूं यह दृष्टिकोण मशीन को नीचे घुमा रहा है और प्रोसेसिंग काफी धीमा हो रहा है। मैं "छोटे" वर्कर भूमिकाओं पर डिस्क अनुमान लगा रहा हूं पर्याप्त तेज़ नहीं हैं।
क्या वैसे भी है, क्या मैं ओएस को मेरी मदद कर सकता हूं और उन फ़ाइलों को कैश कर सकता हूं? शायद इस डेटा को कैशिंग करने का विकल्प है?
मैं आकार में 100k से 10 एमबी से लेकर आकार बदलती के बारे में ~ 1000 फाइलों प्रत्येक बादल भूमिका उदाहरण
शायद 'स्ट्रीमरडर' और स्ट्रीम का उपयोग करके स्मृति में प्रति कार्यकर्ता के सभी 10 एमबी टेक्स्ट डालने की बजाय लाइनों को पढ़ने के लिए? इस पर एक स्वीकार्य समाधान देखने के लिए इंतजार नहीं कर सकता! – TyCobb
धन्यवाद .. लेकिन मुझे "लाइनों" को एक JSON तारों में कनवर्ट करने की आवश्यकता है जिसे मुझे C# ऑब्जेक्ट में कनवर्ट करने की आवश्यकता है। सुनिश्चित नहीं है कि StreamReader इसे हल करने जा रहा है, अगर मुझे फ़ाइल को – Igorek
में फ़ाइल की आवश्यकता है तो शायद नहीं, तो यदि आप लाइन =/ – TyCobb