2009-05-08 8 views
31

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

  • यह एक विरासत डेस्कटॉप एप्लिकेशन है जो यह बदल रहा है। हम मौजूदा बैक एंड का पुन: उपयोग करेंगे।
  • वर्तमान में हमारे पास अवधारणा के सबूत के रूप में उत्पन्न SQLite डेटाबेस है। यह मूल रूप से मौजूदा बैक एंड डेटाबेस का एक कट डाउन संस्करण है।
  • हम एक दूरस्थ साइट से डेटा लोड कर रहे हैं और इसे स्थानीय रूप से संग्रहीत करेंगे, जहां यह जारी रहेगा और इसकी आवश्यकता होगी। अगर हम बदल गए हैं, तो हम केवल इसे अपडेट करेंगे, जो हर महीने या दो होगा। डेटा को स्थानांतरित करने के लिए हम अधिकतर एक्सएमएल या जेएसओएन का उपयोग करेंगे।
  • इस परियोजना पर दो डेवलपर हैं और हम दोनों के पास मजबूत SQL कौशल हैं लेकिन किसी ने भी कोर डेटा का उपयोग नहीं किया है।

मेरे प्रश्न हैं: SQLite पर कोर डेटा का लाभ क्या है, इस विशिष्ट उदाहरण में लाभ क्या होगा और क्या लाभ मौजूदा मजबूत SQL कौशल का उपयोग करने के बजाय एक नए ढांचे को सीखने के औचित्य साबित करते हैं?

संपादित करें: मैंने अभी यह प्रश्न देखा है: Core Data vs SQLite 3। मुझे लगता है कि मेरे सवालों इसलिए कर रहे हैं:

  • मैं अगर किसी विशिष्ट आइटम या तो मौजूद है या एक अद्यतन है, जो एसक्यूएल का उपयोग कर आसान है की जांच करने के लिए है, तो कोर डाटा अभी भी मतलब है? क्या मैं ग्राफ में पहली वस्तु लोड कर सकता हूं और पूरे ग्राफ को लोड किए बिना संस्करण संख्या देख सकता हूं?
  • यदि हम पहले से ही एसक्यूएल जानते हैं, तो क्या इस परियोजना के लिए कोर डेटा के फायदे हमें सीखने के लिए उचित हैं?
+0

ग्रेट उत्तर, धन्यवाद - मैं इस जानकारी को हमारी अगली डिजाइन चर्चा में ले रहा हूं। – Don

+3

बस एक अपडेट के रूप में, हम कोर डेटा के साथ गए; मैं वास्तव में खुश हूं कि हमने किया। सिर्फ दोषपूर्ण क्षमताओं ने इसे सार्थक बना दिया है, लेकिन इसके अलावा कई फायदे हैं। कोर डेटा चुनने के लिए, मैं एसक्यूएल कौशल स्तर पर ध्यान दिए बिना किसी को प्रोत्साहित करता हूं। सीखने की अवस्था उथला है और दोष, अद्वितीय, केवीओ/केवीसी, और स्टोर-ऑब्जेक्ट रूपांतरण जैसे लाभ कई हैं। – Don

उत्तर

18

आप Core Data vs SQLite 3 पढ़ा है के रूप में, आप जानते हैं कि कोर डेटा और दृढ़ता तंत्र (इस मामले में SQLite) काफी हद तक ओर्थोगोनल हैं। कोर डेटा वास्तव में किसी ऑब्जेक्ट ग्राफ़ को प्रबंधित करने के बारे में है और इसका मुख्य उपयोग केस एक एमवीसी आर्किटेक्चर के मॉडल घटक के लिए है। यदि आपका एप्लिकेशन इस आर्किटेक्चर में अच्छी तरह से फिट बैठता है, तो शायद यह कोर डेटा का उपयोग करने लायक है क्योंकि यह आपको मॉडल घटक में बहुत अधिक कोड बचाएगा। यदि आपके पास पहले से ही एक कार्यशील मॉडल घटक है (उदा। मौजूदा डेस्कटॉप ऐप से), तो कोर डेटा आपको ज्यादा नहीं खरीदेंगे। एक हाइब्रिड दृष्टिकोण संभव है - आप अपनी खुद की दृढ़ता/क्वेरीिंग कर सकते हैं और मेमोरी स्टोर में कोर डेटा बना सकते हैं जिसे आप एक क्वेरी के परिणाम के साथ पॉप्युलेट करते हैं और कोर ऐप के माध्यम से इन ऐप मेमोरी स्टोर को अपने ऐप के मॉडल घटक के रूप में उपयोग करते हैं। यह आम नहीं है, लेकिन मैंने इसे किया है और कोई बड़ा रोडब्लॉक नहीं है।

अपने विशिष्ट सवालों के जवाब देने के लिए:

  1. आप पूरे लगातार की दुकान में एक संस्करण संख्या आवंटित और +[NSPersistentStore metadataForPersistentStoreWithURL:error:] के माध्यम से उस जानकारी को पुनः प्राप्त, यहां तक ​​कि दुकान खोलने के बिना कर सकते हैं। बेशक, समकक्ष +setMetadata:forPersistentStoreWithURL:error भी मौजूद है। यदि आप लगातार स्टोर मेटाडेटा के बजाय संस्करण जानकारी को इकाई इकाई में संग्रहीत करना चाहते हैं, तो आप केवल एक ही ऑब्जेक्ट लोड कर सकते हैं। एक SQLite निरंतर स्टोर के साथ, कोर डेटा केवल वही चीज़ लाने के लिए बहुत अच्छा काम करता है जो आपको चाहिए।

  2. NSPredicate एपीआई, सीखना बहुत आसान है और ऐसा लगता है कि यह एसक्यूएल के संकलन का एक अच्छा काम है। कम से कम आकार के डेटाबेस के लिए आप एक आईफोन पर फिट बैठ सकते हैं, यह निश्चित रूप से मेरे अनुभव में पर्याप्त (प्रदर्शन के अनुसार) रहा है। मुझे लगता है कि एसक्यूएल बनाम कोर डेटा सवाल थोड़ा गुमराह है, हालांकि। एक बार जब आप एक प्रश्न का परिणाम प्राप्त कर लेंगे तो आप इसके साथ क्या करने जा रहे हैं? यदि आप अपना खुद का रोल करते हैं, तो आपको ऑब्जेक्ट्स को तुरंत चालू करना होगा, गलती/अनूठीकरण को संभालना होगा (यदि आप किसी क्वेरी के पूरे परिणाम को तुरंत स्मृति में लोड नहीं करना चाहते हैं) और कोर द्वारा प्रदान की गई अन्य सभी ऑब्जेक्ट ग्राफ़ प्रबंधन सुविधाएं डेटा।

+0

मौजूदा फ्रंट एंड एक .NET 1.1 ऐप है, इसलिए वहां कोई पुन: उपयोग नहीं है। हम इसे एक एमवीसी ऐप में मॉडल के रूप में इस्तेमाल करेंगे, जो मुझे इसके बारे में सोच रहा है। मेटाडाटा, केवल एक ही वस्तु लोड करना, और एनएसपी्रेडिकेट - यह सब अच्छी जानकारी है! धन्यवाद। – Don

6

ऐसा लगता है कि आपके पास पहले से ही SQLite का उपयोग करके डिज़ाइन किया गया प्रोजेक्ट है, और आपके पास उस क्षेत्र का अनुभव है।

तो नीचे की रेखा है, क्या यह इस परियोजना को बंद करने के लिए समझ में आता है, क्या कोर डेटा मुझे कुछ भी दे सकता है जो मेरे मूल डिजाइन में पहले से नहीं था?

यह मानते हुए कि मूल परियोजना को इस परियोजना की आवश्यकताओं के आधार पर ठीक से किया गया था, शायद यह इसके लायक नहीं है।

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

इन सवालों के जवाब आपको निर्णय ले सकते हैं कि हाँ, यह वास्तव में ड्राइंग बोर्ड पर वापस जाने के लिए लायक है, और सीखें कि कोर डेटा क्या है।

अपने अंतिम प्रश्न प्राप्त करने के लिए: क्या फायदे हैं? खैर, कोर डेटा आपके डेटाबेस का एक उच्च स्तरीय अमूर्त है, यह डेटा स्टोर अज्ञेयवादी भी है (इसलिए यदि आईफोन का भविष्य संस्करण MySQL के एम्बेडेड संस्करण के लिए SQLite को कुचलना था ... असंभव है, लेकिन यह एक उदाहरण है) तो कोर डेटा को नए डेटा स्टोर के साथ काम करने के लिए कोड में बहुत कम बदलाव की आवश्यकता होगी। कोर डेटा मैक मंच पर त्वरित पोर्टेबिलिटी का एक बड़ा सौदा प्रदान करेगा। कोर डेटा आपके डेटा मॉडल के वर्जनिंग को संभालेगा, जबकि जब तक आपके पास इसे प्रबंधित करने के लिए फ्रेमवर्क या वर्कफ़्लो न हो, तब तक SQLite तक सीधी पहुंच नहीं होगी।

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

+0

इनपुट के लिए धन्यवाद।हां, मूल डिजाइन को SQLite के साथ दिमाग में किया गया था, लेकिन अभी तक कुछ भी शुरू नहीं हुआ है, और यदि कोर डेटा, उदाहरण के लिए, तालिका दृश्य को कार्यान्वित करने में आसान बनाता है, तो यह काफी जल्दी है कि हम इसे बाहर कर सकते हैं। – Don

2

इस मंच से अलग नहीं होना चाहिए, लेकिन आपको Apple iPhone DevForum में प्रासंगिक रूप से प्रासंगिक अनुभव के साथ अधिक उत्तरदाता मिल सकते हैं।

पूरी तरह से परियोजना प्रबंधन परिप्रेक्ष्य से बात करते हुए, ऐसा लगता है कि आप जानते हैं कि आप SQLite का उपयोग करके क्या बनाना चाहते हैं, और इसलिए यह आपके लिए उस मार्ग से शुरू करने के लिए और अधिक समझ में आएगा।

कहा जा रहा है कि कोरडाटा SQLite के शीर्ष पर बनाता है और यदि आप अपने डेटा के संयोजन के साथ सिस्टम के अन्य हिस्सों का लाभ उठाने का प्रयास कर रहे हैं, उदा। केवीसी/केवीओ या बाइंडिंग का उपयोग करके, आप जल्दी से पाते हैं कि यह कार्यक्षमता सीखने की अवस्था के लायक है।

= माइक

+0

अच्छा बिंदु - पता नहीं क्यों मैंने पहले यहां पूछने का विचार किया। केवीओ और बाइंडिंग बिल्कुल ऐसे फायदे हैं जो मेरे साथ नहीं हुए और बड़े प्लस हैं। – Don

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