2012-01-04 13 views
34

अब यह डुप्लिकेट थ्रेड की तरह दिख सकता है, लेकिन मेरा सवाल यह है कि मैंने बहुत सारे प्रश्न पढ़े हैं जैसे Core Data vs SQLite 3 और अन्य लेकिन ये 2-3 साल पुराने हैं। मैंने यह भी पढ़ा है कि एफएमडीबी विकसित किया गया था क्योंकि कोर डेटा आईओएस पर समर्थित नहीं था, इसलिए इसका उपयोग नहीं किया जाना चाहिए। और दूसरी ओर मैंने पढ़ा है कि किसी को डेटा के रूप में कोर डेटा का उपयोग नहीं करना चाहिए।कोर डेटा वीएस स्क्लाइट या एफएमडीबी ....?

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

+0

आप किस डेटा को संग्रहीत कर रहे हैं, इसमें कितना है, आपको किस प्रकार की पुनर्प्राप्ति की आवश्यकता है, क्या यह उपयोगकर्ता द्वारा संपादन योग्य है? – jrturton

+0

मेरा सवाल यही है .. मेरा मतलब है कि मुझे किस आधार पर उपयोग करना चाहिए और सेब या किसी और द्वारा प्रदान किए गए कोई दिशानिर्देश हैं .. या यह ऐसा कुछ है जो समय के साथ मेरे पास आएगा। –

+0

यदि आपको एक ही समय में कई पंक्तियां अपडेट, डालने या हटाने की आवश्यकता है, तो कोर डेटा एक अच्छा विकल्प नहीं होगा। – AechoLiu

उत्तर

44

अंकित के लिए शीर्ष साइट समझाने है यहाँ टीएल; डॉ पतला: कोर डेटा का उपयोग करें।

यहां लंबा रूप है:

आप कई मापदंड इस्तेमाल कर सकते हैं जबकि कोर डाटा, एक ORM (FMDB) या सीधे SQLite कॉल के बीच चयन करने के लिए, इस विकल्प की वास्तविक लागत अपना समय इसका इस्तेमाल करने, एप्पल के से आता है अन्य परियोजनाओं से समर्थन और लाभ। (RESTKit, जो कोर डेटा पर आरईएसटी सेवाएं मानचित्र करता है, इन दिनों लोकप्रिय है।)

इसलिए, समय का एक बड़ा प्रतिशत, 90 +% (एक बना हुआ स्टेट) कहता है, आईओएस पर उत्तर का उपयोग करना होगा कोर डेटा क्यूं कर? एक बार जब आप इसे लटका लें और कुछ छोटी सहायक विधियों का निर्माण करें, तो कोर डेटा आपको एक सतत कंप्यूटिंग दुनिया में रखता है - उद्देश्य-सी ऑब्जेक्ट ग्राफ़। कोर डेटा आपको एक गतिशील भाषा का उपयोग करने के तरीके के बारे में सिखाएगा जो आपके आईओएस प्रोग्रामिंग के हर दूसरे पहलू की मदद करेगा। इसलिए, आप अधिक उत्पादक हैं। ढांचे से लड़ो मत।

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

कोर डेटा प्रदर्शन पर बम रैप प्राप्त करता है। यह वास्तव में काफी तेज़ है। डीबी का उपयोग करने के बजाय आपको इसे अलग-अलग उपयोग करना होगा। विशेष रूप से, आप स्टोर से डेटा को हमेशा से अधिक प्राप्त करते हैं और फिर इसे विभिन्न सेट और सरणी पर सीधे भविष्यवाणी करके परिशोधित करते हैं।आईओएस उपकरणों पर, जहां फ्लैश आश्चर्यजनक रूप से धीमा है, यह ओवर-फ़ेच रणनीति विशेष रूप से प्रभावी है। इन उपकरणों पर वास्तव में आपके पास बहुत सी रैम है, प्रदर्शन प्राप्त करने के लिए इसका उपयोग करें। (हां, मुझे पता है कि पोर्टेबल बिजनेस लॉजिक पर मेरे उपरोक्त दस्तक के लिए यह एक स्पष्ट विरोधाभास है। लेकिन वास्तव में, डेस्कटॉप या सर्वर पर्यावरण से पोर्ट किए गए कोड में डिस्क की गति, स्मृति की मात्रा और वास्तविकता की इतनी सारी मान्य धारणाएं हैं बैकिंग स्टोर के साथ एक वीएम, यह एक बैटरी संचालित, मेमोरी सीमित डिवाइस पर एक फंकी मेमोरी मॉडल के साथ अच्छी तरह से काम नहीं करेगा। [यह एंड्रॉइड डिवाइस पर भी बहुत अच्छा काम नहीं करेगा।]) आप अपने डेटा को सरल बनाने के लिए भी असामान्य करेंगे इसे विभिन्न आईओएस और मैक ओएस एक्स यूआई विगेट्स में प्रदर्शित करना। ऐसे कुछ एप्लिकेशन हैं जहां कोर डेटा बराबर SQLite डीबी की तुलना में धीमा हो जाएगा। उनको कहीं और विस्तृत किया गया है। एक बड़ा दावा यह है कि अपस्ट्रीम डेटाबेस द्वारा आईडी को परिभाषित किए जाने वाले कार्यों को कोर डेटा का प्रदर्शन सही होता है। लेकिन यह कुछ हद तक न्यायसंगत अनुक्रमण और ओवर-फ़ेचिंग द्वारा कम किया जा सकता है।

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

दूसरे शब्दों में, आपको आईओएस/मैक ओएस एक्स पर उद्देश्य-सी का उपयोग करने के लिए "सभी में" जाना होगा, आपको कोर डेटा का उपयोग करने से कुछ महत्वपूर्ण उत्पादकता लाभ भी मिलेंगे।

एंड्रयू

+5

वर्तमान रखरखाव के रूप में जेफ लामार्चे के एसक्यूलाइट पर्सिस्टेंट ऑब्जेक्ट्स, मैं जोड़ता हूं कि एफएमडीबी उपयोग करने के लिए सही SQLite रैपर है। सिर्फ इसलिए कि इसे हाल ही में अपडेट नहीं किया गया है, लेकिन त्याग का संकेत नहीं है बल्कि परिपक्वता का संकेत है। उदाहरण के लिए, मैं ऐप्पल के पहुंच योग्यता कोड का एक संस्करण बनाए रखता हूं, । मैंने थोड़ी देर में अपडेट नहीं किया है। (एक अद्यतन काम में है।) क्यों? यह काफी अच्छी तरह से काम करता है। पुराना स्थिर कोड एक अच्छी बात है। एंड्रयू – adonoho

0

कोर डेटा केवल SQLite3 डेटाबेस का एक ऑब्जेक्ट सारणन है। इसका मतलब है कि आपके पास मानक डेटाबेस संचालन के लिए लगातार प्रबंधित वस्तुओं को प्रबंधित करना आसान होगा। आप एक लेनदेन मोड में भी काम कर सकते हैं और मॉडल बनाकर एक्सकोड में अपनी कोर डेटा डेटाबेस संरचना डिज़ाइन कर सकते हैं।

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

+0

तो क्या हम पूरी तरह से एफएमडीबी को रद्द कर सकते हैं? –

+0

मुझे लगता है कि एफएमडीबी का उपयोग किया गया था क्योंकि कोर डेटा आईओएस में उपलब्ध नहीं है <3.0 –

+3

कोर डेटा डाटाबेस नहीं है: http://cocoawithlove.com/2010/02/differences-between-core-data-and.html। कोर डेटा डेटा स्टोर करने के लिए एक डाटाबेस ईक्क्लाइट का उपयोग करें। – CarlJ

8

मैं अपनी सभी परियोजनाओं के लिए FMDB का उपयोग करता हूं जिनके भारी उपयोग "INSERT एस" और एफएमडीबी का पुराना उपयोग नहीं है। पिछले महीने नवंबर में गिथूब पर आखिरी प्रतिबद्धता थी। यदि आप एसक्यूएल के साथ जाते हैं तो मैं आपको एफएमडीबी का उपयोग करने की सलाह देता हूं।

कोर डेटा सभी परियोजनाओं में से 95% तक फिट बैठता है, लेकिन अगर दीवार पर चलाने के लिए अनुकूलन की बात आती है। यदि आप कोर डेटा (ओओपी, ...) के लाभ चाहते हैं तो इसका इस्तेमाल करें। यदि आप,

डालने एक का एक बहुत "WHERE" उपयोगकर्ता SQLite (FMDB) के साथ हटाता

यह POST बंद और बनाम SQLite (FMDB) कोर दिनांक

+0

मुझे समझ में नहीं आता कि सीधे उद्देश्य-सी sqlite3 फ़ंक्शंस का उपयोग करने के बजाय रैपर का उपयोग क्यों करें। मैं आमतौर पर मॉडल डिजाइन उद्देश्यों के लिए कोर डेटा का उपयोग करता हूं। –

+2

बस: इसका उपयोग करना आसान है! और आप स्वयं द्वारा स्क्लाइट "लॉक" स्थिति को संभाल नहीं पाते हैं, इसकी थ्रेड सेव, पैटर्न मिलान, आप सामान्य फाउंडेशन ऑब्जेक्ट का उपयोग कर सकते हैं और आपका कोड क्लीनर है। (एफएमडीबी) कोड बनाम 10 ++ कोड की 6 लाइनें एसक्लाइट – CarlJ

+0

के साथ कोड मुझे लगता है कि आपका कोड कोर डेटा के साथ बहुत साफ है और सबसे महत्वपूर्ण रूप से आसान है (रिवर्स इंजीनियरिंग कर कर)। –

6

CoreData नहीं सिर्फ एक SQL डेटाबेस के एक अमूर्त है। कोरडाटा ऑब्जेक्ट ग्राफ़ प्रबंधन भी करता है। कोरडाटा उन चीजों को कर सकता है जो एफएमडीबी बस नहीं कर सकता है।

हमेशा की तरह: यह वास्तव में आपके उपयोग के मामले पर निर्भर करता है। लेकिन 99% मामलों में कोरडाटा सही विकल्प है।

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

+0

मैं एफएमडीबी पर एक पास लेगा और आने वाली परियोजनाओं में कोर डेटा का उपयोग करूंगा। धन्यवाद... –

38

मैंने हाल ही में इस यात्रा पर खुद को शुरू किया, और तीनों को आजमाने की कोशिश की। यहाँ मैं क्या सीखा है:

  • कच्चे
    • कम स्तर, डेटाबेस के लिए पूर्ण पहुँच sqlite3। कोई अवशोषण नहीं बहुत verbose - बहुत सरल चीजें करने के लिए कोड का एक अच्छा सौदा लेता है।
  • कोर डाटा
    • बहुत उच्च स्तरीय, कपोल-कल्पना पर बनाया गया है, का उपयोग करना चाहिए एप्पल उत्पन्न डेटाबेस। ICloud सिंक्रनाइज़ेशन और सरल आईओएस-केवल डेटा प्रबंधन के लिए उपयोगी। सीधे डेटाबेस तक पहुंचने के लिए मुश्किल और खतरनाक, और क्रॉस-प्लेटफ़ॉर्म डेटाबेस के लिए उपयोग नहीं किया जाना चाहिए। सरल चीजों को करने के लिए अभी भी उचित मात्रा में कोड लेता है।
  • FMDB
    • उच्च स्तर, बहुत दोस्ताना लेकिन मजबूर नहीं अमूर्त। यदि आपको इसकी आवश्यकता हो तो अभी भी डेटाबेस तक पूर्ण पहुंच प्राप्त करें। परिणामस्वरूप NSDictionary प्रदान करता है जिसमें प्रत्येक आइटम स्वचालित डेटाटाइप के उत्परिवर्तनीय संस्करण में स्वचालित रूप से टाइप किया जाता है (उदाहरण के लिए, टेक्स्ट कॉलम NSMutableString के रूप में लौटाए जाते हैं)। मैंने इसके चारों ओर एक बहुत ही सरल रैपर वर्ग का निर्माण करने के लिए इसे और अधिक समृद्ध बनाने के लिए समाप्त किया, इसलिए मेरे पास selectAllFrom:(NSString *)table where:(NSDictionary *)conditions जैसे स्थिर कार्यों के साथ एक सहायक वर्ग है, जो NSDictionary वस्तुओं की NSArray देता है।NSArray *usersNamedJoe = [DBHelper selectAllFrom:@"user" where:@{@"name": @"Joe"}]; जैसी चीजें करने में सक्षम होना शानदार है।

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


टी एल; डॉ:

  • कच्चे sqlite3 का उपयोग न करें जब तक आप कुछ बेहद तुच्छ कर रहे हैं।
  • कोर डेटा सरल आईओएस-केवल डेटा के लिए ठीक है, अगर आप इसमें लॉक होने में सहज हैं।
  • यदि आप डेटाबेस पर पूर्ण नियंत्रण चाहते हैं और आप कुछ तुच्छ नहीं कर रहे हैं, या आप कई प्लेटफार्मों के लिए अपना ऐप बना रहे हैं, तो एफएमडीबी निश्चित रूप से जाने का तरीका है।
1

एक नया एसक्यूएल पुरुष के रूप में, मैं में फेंक करने जा रहा हूँ मेरी .02:

कोर डाटा में, आप "बॉयलरप्लेट" कोड का एक सा है कि आप इससे पहले कि आप वास्तव में कर सकते हैं में डाल करने की जरूरत है अपने डेटाबेस का प्रयोग करें। आपके ऐप को इनमें से कम से कम एक की आवश्यकता है: 1) एक सतत स्टोर समन्वयक 2) एक प्रबंधित ऑब्जेक्ट संदर्भ 3) एक प्रबंधित ऑब्जेक्ट। यह एक इकाई से संबंधित है, जो एक SQLite डेटाबेस का उपयोग करते हैं, जो एक तालिका से संबंधित है।

ढांचे का पूर्ण लाभ लेने के लिए, आपको यह समझने की आवश्यकता है कि ये डेटा आपके डेटा के प्रबंधन में क्या भूमिका निभाते हैं।

दूसरी तरफ, हमारे पास SQLite है, जो - मेरी राय में - समझने में बहुत आसान है। शुरू करने के लिए, आपको इसकी आवश्यकता होगी: 1) एक डेटाबेस 2) एक तालिका या अधिक (आपके डेटा के आधार पर) 3) एसक्यूएल का ज्ञान - एक सरल वाक्यविन्यास के साथ एक लचीली भाषा (चयन प्रश्न मूल रूप से आप जो भी कर सकते हैं उससे अधिक करते हैं लगता है कि वे करते हैं) 4) एक ऑब्जेक्ट जिसके माध्यम से आपका ऐप SQLite के साथ संचार करता है।