जे 2 एमई


9

के साथ बड़ी मात्रा में डेटा संग्रहीत करने के लिए सर्वोत्तम अभ्यास मैं एक जे 2 एमई एप्लीकेशन विकसित कर रहा हूं जिसमें डिवाइस पर स्टोर करने के लिए बड़ी मात्रा में डेटा है (1 एमबी लेकिन चर के क्षेत्र में)। मैं फाइल सिस्टम पर भरोसा नहीं कर सकता इसलिए मैं रिकॉर्ड प्रबंधन प्रणाली (आरएमएस) फंस गया हूं, जो कई रिकॉर्ड स्टोर्स की अनुमति देता है लेकिन प्रत्येक के पास सीमित आकार होता है। मेरा प्रारंभिक लक्ष्य मंच, ब्लैकबेरी, प्रत्येक को 64 केबी तक सीमित करता है।

मुझे आश्चर्य है कि किसी और को आरएमएस में बड़ी मात्रा में डेटा संग्रहीत करने की समस्या से निपटना पड़ा और उन्होंने इसे कैसे प्रबंधित किया? मैं रिकॉर्ड आकार की गणना करने और एकाधिक स्टोर्स में एक डेटा सेट को विभाजित करने के बारे में सोच रहा हूं, यदि यह बहुत बड़ा है, लेकिन यह बरकरार रखने के लिए बहुत जटिलता जोड़ता है।

कई प्रकार के डेटा संग्रहीत किए जा रहे हैं लेकिन विशेष रूप से केवल एक सेट 64 केबी सीमा से अधिक होगा।

  0

ध्यान देने योग्य हो सकता है कि कुछ डिवाइस आपको रिकॉर्ड किए गए रिकॉर्ड स्टोर की संख्या को सीमित भी कर सकते हैं। यह 2 के रूप में कम हो सकता है। 18 mar. 152015-03-18 16:29:44

9

कुछ किलोबाइट्स के पिछले कुछ भी के लिए आपको जेएसआर 75 या रिमोट सर्वर का उपयोग करने की आवश्यकता है। कुछ उच्च अंत हैंडसेट में भी आरएमएस रिकॉर्ड आकार और गति में बेहद सीमित हैं। यदि आपको जे 2 एमई में 1 एमबी डेटा को जोड़ना है तो केवल विश्वसनीय, पोर्टेबल तरीका इसे नेटवर्क पर स्टोर करना है। HttpConnection वर्ग और GET और POST विधियों को हमेशा समर्थित किया जाता है।

जेएसआर 75 फ़ाइलकनेक्शन का समर्थन करने वाले हैंडसेट पर यह वैध विकल्प हो सकता है लेकिन कोड हस्ताक्षर किए बिना यह उपयोगकर्ता अनुभव दुःस्वप्न है। लगभग हर एक एपीआई कॉल एक कंबल अनुमति विकल्प के साथ एक सुरक्षा संकेत का आह्वान करेगा। जेएसआर 75 के साथ ऐप्स को तैनात करने वाली कंपनियां आमतौर पर संभावित पोर्टफोलियो के एक छोटे से हिस्से को कवर करने के लिए प्रत्येक बंदरगाह के लिए आधा दर्जन बाइनरी की आवश्यकता होती है। और यह सिर्फ निर्माता प्रमाण पत्र के लिए है; कुछ हैंडसेट में केवल वाहक-लॉक प्रमाण पत्र होते हैं।


3

मुझे लगता है कि सबसे लचीला दृष्टिकोण आरएमएस के शीर्ष पर अपनी फाइल सिस्टम को लागू करना होगा। आप आरएमएस रिकॉर्ड को हार्ड ड्राइव पर ब्लॉक के समान तरीके से संभाल सकते हैं और inode structure का उपयोग कर सकते हैं या एकाधिक ब्लॉक पर लॉजिकल फ़ाइलों को फैलाने के समान ही कर सकते हैं। मैं ब्लॉक के शीर्ष पर एक बाइट या स्ट्रीम उन्मुख इंटरफेस को लागू करने की सिफारिश करता हूं, और उसके बाद संभवतः विशेष डेटा संरचनाओं को लिखने के लिए इसके ऊपर एक और एपीआई परत बनाना (या बस अपनी ऑब्जेक्ट को डेटा स्ट्रीम में क्रमबद्ध करने के लिए)।

Tanenbaum's classical book on operating systems एक साधारण फ़ाइल सिस्टम को कार्यान्वित करने के तरीके को कवर करता है, लेकिन मुझे यकीन है कि यदि आप पेपर पसंद नहीं करते हैं तो आप अन्य संसाधन ऑनलाइन प्राप्त कर सकते हैं।


4

आरएमएस प्रदर्शन और कार्यान्वयन उपकरणों के बीच जंगली रूप से भिन्न होता है, इसलिए यदि प्लेटफ़ॉर्म पोर्टेबिलिटी एक समस्या है, तो आप पाएंगे कि आपका कोड कुछ उपकरणों पर अच्छा काम करता है, न कि अन्य। आरएमएस को बड़ी मात्रा में डेटा (उच्च स्कोर टेबल, या जो कुछ भी) बड़ी मात्रा में स्टोर करने के लिए डिज़ाइन किया गया है।

आपको लगता है कि कई प्लेटफ़ॉर्म कई रिकॉर्ड स्टोर्स में संग्रहीत फ़ाइलों के साथ तेज़ हैं। कुछ एक स्टोर के भीतर कई रिकॉर्ड के साथ तेज हैं। कई भंडारण के लिए ठीक हैं, लेकिन स्टोर से बड़ी मात्रा में डेटा हटाते समय असामान्य रूप से धीमे हो जाते हैं।

आपकी सबसे अच्छी शर्त जेएसआर -75 का उपयोग करने के बजाय जहां उपलब्ध हो, और अपना स्वयं का फ़ाइल स्टोर इंटरफ़ेस बनाना है जो आरएमएस पर वापस आ जाता है यदि कुछ भी बेहतर नहीं है।

दुर्भाग्य से जब यह जावाएमई की बात आती है, तो आप अक्सर अपने कोड के डिवाइस-विशिष्ट रूपों को लिखने के लिए तैयार होते हैं।


1

मैं सिर्फ जावाएमई के लिए कोड शुरू कर रहा हूं, लेकिन पामोज़ के पुराने संस्करणों के साथ अनुभव है, जहां सभी डेटा भाग आकार में सीमित हैं, रिकॉर्ड इंडेक्स और ऑफ़सेट का उपयोग कर डेटा संरचनाओं के डिजाइन की आवश्यकता होती है।


2

ब्लैकबेरी ओएस 4.6 के तहत आरएमएस स्टोर आकार सीमा 512 केबी तक बढ़ा दी गई है, लेकिन यह बहुत मदद नहीं है क्योंकि कई उपकरणों के लिए 4.6 के लिए समर्थन नहीं होगा।ब्लैकबेरी पर दूसरा विकल्प पर्सिस्टेंट स्टोर है जिसमें 64kb की रिकॉर्ड आकार सीमा है लेकिन स्टोर के आकार (डिवाइस की भौतिक सीमाओं के अलावा) पर कोई सीमा नहीं है।

मुझे लगता है कि कार्लोस और izb सही हैं।


2

यह काफी सरल है, JSR75 (FileConnection) का उपयोग करें और अपने मिडलेट को वैध (विश्वसनीय) प्रमाण पत्र के साथ साइन करना याद रखें।


1

उपयोगी श्रमिकों के लिए सभी को धन्यवाद। अंत में सबसे सरल समाधान संग्रहित डेटा की मात्रा को सीमित करना था, उस कोड को कार्यान्वित करना जो डेटा को कितना बड़ा है, डेटा के अनुसार समायोजित करता है, और सर्वर से डेटा को स्थानीय रूप से संग्रहीत नहीं किया जाता है। दिलचस्प बात यह है कि ओएस 4.6 में सीमा बढ़ी है, किसी भी भाग्य के साथ मेरा कोड बस अपने आप को समायोजित करेगा और अधिक डेटा स्टोर करेगा :)

.cod कंपाइलर का उपयोग किए बिना ब्लैकबेरी के लिए जे 2 एमई एप्लिकेशन का विकास करना जेएसआर 75 के उपयोग को सीमित करता है कुछ तो क्या हम संग्रह पर हस्ताक्षर नहीं कर सकते हैं। कार्लोस द्वारा बताए गए अनुसार यह किसी भी मंच पर एक समस्या है और इसके पीआईएम भाग का उपयोग करके मुझे इसी तरह के मुद्दे हैं। आरएमएस ब्लैकबेरी प्लेटफ़ॉर्म पर अविश्वसनीय रूप से धीमा प्रतीत होता है, इसलिए मुझे यकीन नहीं है कि शीर्ष पर एक इनोड/बी-पेड़ फ़ाइल सिस्टम कितना उपयोगी होगा, जब तक कि डेटा स्मृति में कैश नहीं किया गया हो और कम प्राथमिकता पृष्ठभूमि थ्रेड में आरएमएस को लिखा गया हो।

  0

यदि आप आरआईएम के साथ पंजीकृत हैं और एक हस्ताक्षर कुंजी प्राप्त करते हैं, तो आप लगातार स्टोर एपीआई का उपयोग कर सकते हैं, जहां डेटा के मेगाबाइट्स को संग्रहीत करना ठीक काम करता है। मुझे लगता है कि हस्ताक्षर कुंजी पर बहुत अधिक खर्च नहीं होता है। 29 sep. 082008-09-29 10:33:26

  0

जैसा कि मैंने कहा, मैं केवल जे 2 एमई एपीआई का उपयोग कर रहा हूं। मैं आरआईएम एपीआई तक नहीं पहुंच सकता अन्यथा मुझे यह समस्या नहीं होगी। 02 oct. 082008-10-02 22:07:45


2

केवल पढ़ने के लिए मैं एक संसाधन फ़ाइल अनुक्रमणित करके स्वीकार्य समय (10s के भीतर) पर पहुंच रहा हूं। मुझे दो ~ 800 केबी सीएसवी मूल्य सूची निर्यात मिला है। कार्यक्रम कक्षाएं और उन दोनों फ़ाइलों को 300 केबी जार से संपीड़ित किया जाता है।

खोज पर मैं List प्रदर्शित करता हूं और इसे भरने के लिए पृष्ठभूमि में दो Thread एस चलाता हूं, इसलिए पहले परिणाम बहुत जल्दी आते हैं और तुरंत देखने योग्य होते हैं। मैंने पहले एक साधारण रैखिक खोज लागू की, लेकिन वह बहुत धीमी थी (~ 2min)।

फिर मैंने प्रत्येक पत्र की शुरुआत को खोजने के लिए फ़ाइल (जो वर्णानुक्रम में क्रमबद्ध है) को अनुक्रमित किया। लाइन से लाइन को पार्स करने से पहले, पहले अक्षर पर आधारित, मैं वांछित स्थिति में पहले InputStreamReader.skip()। मुझे संदेह है कि देरी ज्यादातर संसाधनों को कम करने से आती है, इसलिए विभाजित संसाधन इसे आगे बढ़ाएंगे। मैं ऐसा नहीं करना चाहता, आसान अपग्रेड का लाभ खोना नहीं। सीएसवी किसी प्रीप्रोकैसिंग के बिना निर्यात किया जाता है।