2012-07-13 12 views
11

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

मैं SQLite डेटाबेस सुविधा का उपयोग करने के लिए अपने एप्लिकेशन को फिर से लिखना चाहता हूं।
चूंकि मैं आलसी हूं, मैं किसी प्रकार का ओआरएम उपयोग करना चाहता हूं।

अब तक मैं पाया है केवल दो बड़े ORM पुस्तकालयों:

काम कर रहा पर उठाने के प्रदर्शन करने के लिए मेरे प्राथमिक लक्ष्य है डेटा के साथ उतना ही संभव

लेकिन मुझे उन पुस्तकालयों के साथ दो संभावित समस्याएं मिली हैं।

  • ORMLite एनोटेशन का उपयोग करता है, जो बड़ा है this bug की वजह से पूर्व मधुकोश में प्रदर्शन मुद्दा

  • GreenDAO कोड जनरेटर किसी तरह का उपयोग कर रहा है, और यह मेरे रूप में विकास पर धीमा होगा मुझे जनरेटर लिखना होगा, और फिर जेनरेट कोड का उपयोग करना होगा। और मुझे यह विचार बहुत पसंद नहीं है।

  • db4o जेपीए, जो मैं हमेशा धीमी और स्मृति के उपयोग पर भारी है, इसलिए कम उन्नत उपकरणों के लिए अनुपयुक्त (एंड्रॉयड एपीआई v7 याद)


विज्ञापन के रूप में माना जाता है है @ चेनकिन्नर:
अनुमानित भार एक ओआरएम का उपयोग करने के बारे में सोचने के लिए पर्याप्त होना चाहिए।
मेरे मामले में यह लगभग 25-30 अद्वितीय सारणी है, और कम से कम 10 तालिका जुड़ती है (एक समय में 2 - 4 टेबल)। के बारे में 300-500 अनन्य फ़ील्ड (स्तंभ)


तो मेरी प्रश्न हैं:

  1. मैं Android आवेदन में ORM/जेपीए परत उपयोग करना चाहिए?
  2. यदि हां, तो आप मुझे किस पुस्तकालय का उपयोग करने की सलाह देंगे? (और कृपया भी कुछ तर्क जोड़ने)
+0

हम कितने टेबल के बारे में बात कर रहे हैं? आपका डेटा कितना बड़ा है? –

+1

सिर्फ रिकॉर्ड के लिए, ORMLite भी आपके प्रकार के लिए टेबल कॉन्फ़िगरेशन का समर्थन करता है जो एनोटेशन प्रदर्शन समस्याओं के आसपास काम करता है। – Gray

+0

@ यह सुनकर बहुत अच्छा लगा, अगर आप रुचि रखते हैं, तो उदाहरण के लिए उत्तर देने के लिए स्वतंत्र महसूस करें और बेंचमार्क, क्योंकि आप सही व्यक्ति हैं, जिनके पास यह डेटा होना चाहिए। –

उत्तर

4

मैंने ORMLite का उपयोग किया है और इसे लटकने के बाद इसे सरल पाया है (कुछ घंटों), काफी शक्तिशाली और किसी भी प्रदर्शन की समस्या नहीं है (ऐप एचटीसी इच्छा और एचटीसी हीरो पर जिंजरब्रेड में परीक्षण किया गया है)।

मैं किसी भी परियोजना में फिर से इसका उपयोग करूँगा जिसके लिए मुझे डीबी का उपयोग करने की आवश्यकता है।

+0

मुझे यह पसंद है, लेकिन जेपीए पूरी तरह से समर्थित नहीं है, और यह उल्लेखनीय है कि आपको जेपीए से अधिक ऑर्मिलाइट एनोटेशन सिस्टम का उपयोग करना होगा। – Snicolas

+0

क्या चीनी पुस्तकालय जैसे अन्य पुस्तकालयों की बेंचमार्क तुलना भी है? –

0

मैं साझा इतना करने के लिए कुछ ज्ञान हो गया है: ORM परिभाषा के द्वारा अपनी खुद की एसक्यूएल लेखन की तुलना में धीमी है, यह डेटा का उपयोग की कोडिंग को आसान बनाने के लिए लगता है, और एक सामान्य समाधान प्रदान करते हैं , सामान्य = एसक्यूएल अच्छी तरह से जानते हैं, तो आप अपने प्रश्न लिखने से धीमी गति से चलता है।

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

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

और आपका डीबी इतना बड़ा और जटिल नहीं है, इसलिए जब आप ऑरम के साथ सहेज लेंगे तो कोई मुद्दा नहीं है।

2

एक ओआरएम परत आकर्षक है।

हालाँकि, व्यवहार में मैं या तो साधारण ORM अपने आप लिख सकते हैं या Content Provider प्रतिमान है, जो ORM के साथ अच्छी तरह से सहयोग नहीं का उपयोग करें।

मैं कुछ मौजूदा ORM पुस्तकालयों (मुख्य रूप से ORMLite, activeAnroid) में देखा है लेकिन वे सभी मुझे दूर डर वे ऐसा आरंभ करने के लिए आसान नहीं लगता है के रूप में।

"हम 25-30 के बारे में अद्वितीय टेबल बात कर रहे हैं, और कम से कम 10 तालिका मिलती है। बारे में 300-500 अनन्य फ़ील्ड (स्तंभ)" की

आप निश्चित और सीमित है पैटर्न डेटा की पूछताछ कैसे की जाएगी, मैं आपको ओआरएम/एसक्यूएल लिखने की सलाह दूंगा।

मेरा 2 सेंट।

1

यदि आप अपने ऐप के प्रदर्शन के बारे में चिंतित हैं, तो मैं greenDAO की अनुशंसा करता हूं। यह आपको बहुत सारे उबाऊ कोड लिखने से बचाएगा, इसलिए कोड जनरेशन एक मुद्दा नहीं होना चाहिए। बदले में, यह आपके लिए भी संस्थाएं और डीबी इकाई परीक्षण उत्पन्न करेगा।

0

मेरे अनुभव में, मुझे ओआरएम इंजनों का उपयोग करने से बहुत सारे लाभ थे। हालांकि, ऐसा मामला था जब मुझे प्रदर्शन समस्याओं से निपटना पड़ा।

मुझे डेटाबेस से लगभग 10 000 पंक्तियों को लोड करना पड़ा, और मानक कार्यान्वयन (मैं ORMLite का उपयोग कर रहा था) के साथ, इसे पूरा करने में लगभग 1 मिनट लग गया (डिवाइस सीपीयू पर निर्भर करता है)।

जब आपको डेटाबेस से बहुत सारे डेटा को पढ़ने की आवश्यकता होती है, तो आप सादे एसक्यूएल निष्पादित कर सकते हैं और परिणामों को स्वयं पार्स कर सकते हैं (मेरे मामले में, मुझे केवल तालिका से 3 कॉलम के लिए पूछताछ की आवश्यकता है)। ORMLite आपको कच्चे नतीजों को पुनः प्राप्त करने की अनुमति देता है। इसके द्वारा, प्रदर्शन 10 गुना बढ़ गया है। सभी 10 000 पंक्तियों को 5 सेकंड या उससे कम समय में लोड किया गया था!

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