2010-01-07 16 views
8

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

वर्तमान में मैं डेटा (एक एक्सएमएल फ़ाइल) को पकड़ रहा हूं और SAX का उपयोग करके ऑब्जेक्ट पेड़ में इसे पार्स कर रहा हूं। यह प्रक्रिया मेरे वाईफ़ाई पर 2-3 सेकंड (अधिकतर) लेती है। हालांकि, परिणामी ऑब्जेक्ट्स को एसडीकार्ड में क्रमबद्ध करने में काफी समय लगता है (एक मिनट या उससे अधिक) और deserializing इसे अभी भी पहले स्थान पर डाउनलोड/पार्सिंग से अधिक समय लगता है।

क्या किसी के पास इस डेटा को जारी रखने के लिए इस या वैकल्पिक विचारों को सुधारने के लिए कोई सिफारिश है (केवल XML फ़ाइल को सहेजने और हर बार पुनर्स्थापित करने के अलावा)?

अद्यतन: यह रिकॉर्ड के एक छोटे से संग्रह से अधिक है। ऑब्जेक्ट-ग्राफ वास्तव में हास्यास्पद रूप से जटिल है और इसे डेटाबेस में संग्रहीत करने के परिणामस्वरूप दर्जनों टेबलों में से प्रत्येक में केवल एक ही रिकॉर्ड होगा।

उत्तर

10

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

मैंने पहले से एक ऐप में सीरियलज़ेबल से जेएसओएन फाइल स्टोरेज में स्विच किया है और गति वृद्धि कम से कम एक क्रम के अविश्वसनीय थी।

(मैं आपके प्रश्न को गलत समझ सकता हूं - मुझे लगता है कि आप डिस्क पर लिखने के लिए सीरियलज़ेबल का उपयोग कर रहे हैं। अगर आप एक्सएमएल को पुन: पेश कर रहे हैं, तो मुझे यकीन नहीं है कि यह एसडी कार्ड पर इतना धीमा क्यों है। इसके अलावा, मैं मानता हूं कि SQLite डेटाबेस आमतौर पर सबसे अधिक समझ में आता है, लेकिन जैसा कि आपने पहले ही कहा है कि यह आपके आवेदन की ज़रूरतों को पूरा नहीं करता है।)

+0

मैं सर्वर से सीधे एक्सएमएल फ़ाइल को संग्रहीत करने पर गंभीरता से विचार कर रहा था (और शायद होगा) ... जब भी डेटा की आवश्यकता होती है तो यह ऑब्जेक्ट को deserializing की तरह लग रहा था "एक्सएमएल फ़ाइल को दोबारा करने से तेज होना चाहिए"। –

+0

ऑब्जेक्ट सीरियलाइजेशन काम करता है क्योंकि यह बहुत सामान्य है, और जेनेरिक कोड बहुत धीरे-धीरे चल सकता है। इसके अलावा, भंडारण बहुत बड़ा है; मुझे लगता है कि मैंने 10+ किलोबाइट्स से फ़ाइल आकार घटाया है जिसमें सीरियलाइजेशन के तहत एक किलोबाइट (जो मेरे जेएसओएन को गेजिंग करता है)। –

-2

आप डेटाबेस का उपयोग क्यों नहीं करते? Android Data Storage Guide

+0

एक डीबी सिर्फ इस एप्लिकेशन के लिए समझ में नहीं आता है ... मैं चाहता हूं, लेकिन यह सिर्फ गलत तकनीक है। –

+0

जो उन्होंने डेटाबेस संचालित वेब के बारे में जो कहा वह 10 साल पहले –

+0

condescension के लिए धन्यवाद ... यह सहायक है। –

0

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

हम एसएक्स का उपयोग करके एक्सएमएल लाने और पार्स करके इसे करते हैं, और (पार्सिंग करते समय) इसे सभी को SQLite डेटाबेस में लिखते हैं। और फिर हम डेटासेट के कुछ दृश्य प्रदर्शित करने के लिए हर बार डेटाबेस से पूछताछ कर रहे हैं।

एक आकर्षण की तरह काम करता है, और Google मानचित्र ओवरले पर बहुत अधिक डेटा प्रदर्शित करने के लिए पर्याप्त तेज़ है, जहां हम अपने मानचित्र ओवरले की ड्रॉ विधि में प्रत्येक कॉल पर डेटाबेस से पूछताछ कर रहे हैं।

तो मैं निश्चित रूप से SQLite database के लिए जाने का सुझाव दूंगा, यदि XML दस्तावेज़ में डेटा आसानी से डेटाबेस में प्रदर्शित होता है।

3

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

0

यदि वेब सेवा आपको केवल एक निश्चित संख्या में परिणाम दे सकती है (जैसे कुछ: इंडेक्स 1 और 10 के बीच अनुरोध डेटा या मुझे पहले 25 परिणाम दें) इसका उपयोग करने का प्रयास करें (एक सरल "अधिक परिणाम लोड करें" बटन या कार्यान्वित करें एक ऑटो लोडिंग तंत्र)। यदि वेब सेवा इस सुविधा को प्रदान नहीं करती है तो अपने एक्सएमएल को एसडीकार्ड पर सहेजने का प्रयास करें और जब आपको डेटा की आवश्यकता होती है तो केवल कुछ निश्चित परिणामों को पार्स करने का प्रयास करें। उममीद है कि इससे मदद मिलेगी!

संबंधित मुद्दे