मुझे एक ही मशीन (दो अलग-अलग JVMs) पर चल रहे दो जावा अनुप्रयोगों के बीच डेटा साझा करने की आवश्यकता है। मैं सटीक हूं कि साझा किया जाने वाला डेटा बड़ा है (लगभग 7 जीबी)। एप्लिकेशन को डेटा को बहुत तेजी से एक्सेस करना होगा क्योंकि उन्हें आने वाली क्वेरी का जवाब बहुत अधिक दर पर देना होगा। मैं नहीं चाहता कि अनुप्रयोग प्रत्येक को डेटा की प्रतिलिपि रखें।मेमोरी-मैप की गई फ़ाइलें: पेशेवर और विपक्ष?
मैंने देखा है कि एक विकल्प स्मृति-मैप की गई फ़ाइलों का उपयोग करना है। एप्लिकेशन ए को कहीं से डेटा मिल जाता है (चलिए डेटाबेस कहें) और इसे फाइलों में स्टोर करते हैं। फिर अनुप्रयोग बी java.nio
का उपयोग करके इन फ़ाइलों तक पहुंच सकता है। मुझे नहीं पता कि स्मृति-मैप की गई फाइलें कैसे काम करती हैं, मुझे केवल इतना पता है कि डेटा एक फ़ाइल में संग्रहीत है और यह फ़ाइल (या इसका एक हिस्सा) मेमोरी (वर्चुअल मेमोरी?) में मैप की गई है। तो, दो अनुप्रयोग स्मृति में डेटा को पढ़ सकते हैं और परिवर्तन स्वचालित रूप से (मुझे लगता है?) फ़ाइल के लिए प्रतिबद्ध हैं। मुझे यह भी नहीं पता कि फाइल में पूरी तरह से मैप में मैप किए जाने के लिए अधिकतम आकार है या नहीं।
मेरा पहला सवाल यह है कि इस परिदृश्य में डेटा साझा करने के लिए दो अनुप्रयोगों के लिए अलग-अलग संभावनाएं क्या हैं (मेरा मतलब है कि डेटा की मात्रा बहुत बड़ी है और इस डेटा तक पहुंच बहुत तेज होनी चाहिए)? मैं सटीक हूं कि यह प्रश्न स्मृति-मैप किए गए I/O से संबंधित नहीं है, यह सिर्फ यह जानने के लिए कि एक ही समस्या को हल करने के अन्य तरीके क्या हैं।
मेरा दूसरा प्रश्न स्मृति-मैप की गई फ़ाइलों का उपयोग करने के पेशेवरों और विपक्ष क्या हैं?
धन्यवाद
यू भी विवरण प्रदान कर सकते का एक उदाहरण के रूप में, कैसे वास्तव में आप स्मृति का उपयोग करना चाहते मैप की फ़ाइलें? – DarthVader
मुझे लगता है कि प्रश्न अन्य कार्यक्रम में कुछ कार्रवाई के ट्रिगर करने के बारे में नहीं है। यदि ऐसा है तो डेटा साझा करने के लिए एक सामान्य डेटाबेस क्यों नहीं है? –
@Pangea मैं समय का उपयोग की कमी है, एप्लिकेशन को तेज़ी से डेटा का उपयोग करना होगा। –