मेरे पास RAID 2 (4 x 7.2k @ 3TB) सिस्टम पर केवल 2TB पढ़ने के लिए (केवल एक बार लिखा नहीं गया) फ़ाइलें हैं।2TB फ़ाइल से फ़ाइल ऑफ़सेट द्वारा यादृच्छिक रूप से कई 300 बाइट्स टुकड़ों को पढ़ने का सबसे तेज़ तरीका?
अब मेरे पास कुछ थ्रेड हैं जो उस फ़ाइल के भाग पढ़ना चाहते हैं। प्रत्येक थ्रेड में इसकी जरूरतों के एक सरणी होती है। प्रत्येक खंड को फ़ाइल ऑफसेट (स्थिति) और आकार (लगभग 300 बाइट्स) से पढ़ने के लिए संबोधित किया जाता है।
इस डेटा को पढ़ने का सबसे तेज़ तरीका क्या है। मुझे सीपीयू चक्रों की परवाह नहीं है, (डिस्क) विलंबता क्या मायने रखती है। तो यदि संभव हो तो मैं हार्ड डिस्क के एनसीक्यू का लाभ लेना चाहता हूं।
चूंकि फाइलें अत्यधिक संकुचित होती हैं और यादृच्छिक रूप से एक्सेस की जाती हैं और मुझे बिल्कुल स्थिति पता है, मेरे पास इसे अनुकूलित करने का कोई और तरीका नहीं है।
- क्या मुझे फ़ाइल को एक थ्रेड पर पढ़ना चाहिए?
- क्या मुझे फ़ाइल को खोलना चाहिए?
- प्रत्येक थ्रेड (शायद लगभग 30) प्रत्येक फाइल को एक साथ खोलना चाहिए, नए थ्रेड के साथ क्या है (वेब सर्वर से)?
- अगर मैं 100ms इंतजार करता हूं और फ़ाइल रीसेट्स (सबसे पहले सबसे पहले) द्वारा अपने रीडिंग को सॉर्ट करता हूं तो क्या इससे मदद मिलेगी?
डेटा पढ़ने का सबसे अच्छा तरीका क्या है? क्या आपके पास अनुभव, टिप्स, संकेत हैं?
क्या पढ़े धागे फाइलों को खुले रखना चाहिए? मैं सोचता हूँ हा। क्या आप FileOptions.RandomAccess के साथ एक फ़ाइलस्ट्रीम का उपयोग करेंगे? आप "सिंक्रनाइज़ रूप से खंड को पढ़ते हैं" लिखते हैं। क्या इसका मतलब यह है कि प्रत्येक सिंगल रीड थ्रेड को डिस्क से एक खंड पढ़ने शुरू करना चाहिए जैसे ही यह एक खंड पढ़ने के लिए आदेश देता है? – Chris
आपकी टिप्पणी का जवाब देने का प्रयास कर मेरा जवाब संपादित किया। –
मैं भूल गया, आपने लिखा: "अच्छा लॉकलेस कतार कार्यान्वयन 10ns से कम विलंबता से शुरू होता है"। क्या आपके पास एक विशेष कक्षा/परियोजना है? – Chris