मैं कुछ जावा कोड पर काम कर रहा हूं जिसका अंततः कुछ वास्तविक फ़ाइलों (20 जीबी के तहत 1 जीबी से अधिक) तक पहुंचने के लिए ऐप सर्वर के भीतर उपयोग किया जाएगा, संभवतः एनएफएस पर होस्ट किया गया शेयर।java.io.RandomAccessFile स्केलेबिलिटी (या अन्य विकल्प)
- बड़ी फाइल मुझे लगता है कि फ़ाइल
- पढ़ें कि फ़ाइल (आमतौर पर 1 एमबी से कम)
- से बाइट्स में एक यादृच्छिक बात करने के लिए
- नेविगेट पढ़ने की जरूरत खोजें: एक व्यक्ति अनुरोध सर्विसिंग यह कर शामिल होगी उन बाइट्स
लौटें मैं पल कि बस एक नया केवल पढ़ने के लिए फ़ाइल को खोलता है और यह बंद कर देता है पर कुछ खुश सरल POC कोड है:
RandomAccessFile raf=new RandomAccessFile(myFileName, "r");
try{
byte[] buffer = new byte[size];
raf.seek(position);
raf.reafFully(buffer);
return buffer;
}
finally{
raf.close();
}
मुझे आश्चर्य है कि यह एक सुंदर सरल दृष्टिकोण है जो वास्तव में अच्छा काम करना चाहिए, या मूर्खतापूर्ण सरल दृष्टिकोण जिसमें भारी भार के तहत बहुत सी समस्याएं होंगी (और शायद मुझे थ्रेड-सुरक्षित पूल बनाना होगा पाठकों, आदि)। स्पष्ट रूप से उस धारणा का परीक्षण करना सबसे अच्छा होगा, लेकिन मैं सोच रहा था कि क्या किसी भी दृष्टिकोण के साथ कोई सर्वोत्तम प्रथा या ज्ञात समस्याएं थीं। अब तक मैं बहुत ज्यादा googling पता लगाने में सक्षम नहीं है ...
धन्यवाद!
पीएस। यह अभी तक स्पष्ट नहीं है कि इसका अंतिम संस्करण विंडोज या * निक्स पर होस्ट किया जाएगा या नहीं। यह भी स्पष्ट नहीं है कि बड़ी फ़ाइलों को कैसे साझा किया जाएगा। पीपीएस। ऐप सर्वर को क्लस्टर में कॉन्फ़िगर करने की संभावना है, इसलिए दो अलग-अलग ऐप सर्वरों को एक ही समय में एक ही बड़ी साझा फ़ाइल को पढ़ने की आवश्यकता हो सकती है।
मुझे ठीक लग रहा है। जब तक आप स्थानीय डिस्क पर या स्मृति – irreputable
में फ़ाइल को कैश नहीं करते हैं, तब तक आप इससे तेज नहीं हो सकते हैं, इसलिए फ़ाइल हैंडल खोलने और रिलीज़ करने की लागत नगण्य है? यहां तक कि, एनएफएस शेयर कहें? – Dave
शायद स्थानीय फाइलों पर भी नगण्य नहीं है। यदि यह चिंता का विषय है, तो आप हैंडल का पूल रख सकते हैं। या, 1 'FileChannel' खोलें, इसे पढ़ने के लिए समवर्ती रूप से पढ़ें (डीएसटी, स्थिति) ' – irreputable