कोर डेटा बनाम SQLite 3 [बंद]


314

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

SQLite पर कोर डेटा का उपयोग करने के लिए बहुत लाभ है, या इसके विपरीत? प्रत्येक के पक्ष / विपक्ष क्या हैं?

मुझे कोर डेटा सीखने की लागत को उचित ठहराना कठिन लगता है जब Apple अपने कई प्रमुख अनुप्रयोगों जैसे Mail.app या iPhoto.app के लिए इसका उपयोग नहीं करता है - बजाय SQLite डेटाबेस के लिए चुनने के। SQLite का उपयोग iPhone पर बड़े पैमाने पर किया जाता है।

क्या दोनों अपने अनुभव पर टिप्पणी करने से परिचित हो सकते हैं? शायद, ज्यादातर चीजों के साथ, सवाल केवल एक के ऊपर एक का उपयोग करने से अधिक गहरा है?


1
क्या आप जानते हैं कि जो कुछ भी नहीं है, उसके लिए कृपया en.wikipedia.org/wiki/Core_Data का लिंक जोड़ें ।
आरएसबीटी

7
ध्यान दें कि कोर डाटा है नहीं और एक डेटाबेस के रूप में नहीं किया जाना चाहिए!

जवाबों:


281

हालांकि कोर डेटा Apple के एंटरप्राइज ऑब्जेक्ट फ्रेमवर्क का एक वंशज है , एक ऑब्जेक्ट-रिलेशनल मैपर (ORM) जो / एक कसकर एक रिलेशनल बैकेंड से बंधा हुआ है, कोर डेटा नहीं है एक ओआरएम । यह वास्तव में, एक वस्तु ग्राफ प्रबंधन ढांचा है। यह ऑब्जेक्ट इंस्टेंस के संभावित रूप से बहुत बड़े ग्राफ का प्रबंधन करता है, जिससे एक ऐप को एक ग्राफ के साथ काम करने की अनुमति मिलती है जो आवश्यक रूप से मेमोरी में और बाहर वस्तुओं को गलती से पूरी तरह से मेमोरी में फिट नहीं होगा। कोर डेटा भी गुणों और संबंधों पर बाधाओं का प्रबंधन करता है और संदर्भ अखंडता को बनाए रखता है (उदाहरण के लिए जब वस्तुओं को एक रिश्ते से जोड़ा / हटा दिया जाता है तो आगे और पीछे के लिंक को सुसंगत रखते हुए)। कोर डेटा इस प्रकार MVC आर्किटेक्चर के "मॉडल" घटक के निर्माण के लिए एक आदर्श ढांचा है।

अपने ग्राफ प्रबंधन को लागू करने के लिए, कोर डेटा एक डिस्क स्टोर के रूप में SQLite का उपयोग करने के लिए होता है। इसे एक अलग रिलेशनल डेटाबेस या यहां तक ​​कि एक गैर-रिलेशनल डेटाबेस जैसे कि CouchDB का उपयोग करके लागू किया जा सकता था । जैसा कि अन्य ने बताया है, कोर डेटा भी एक्सएमएल या एक द्विआधारी प्रारूप या बैकएंड के रूप में एक उपयोगकर्ता-लिखित परमाणु प्रारूप का उपयोग कर सकता है (हालांकि इन विकल्पों के लिए आवश्यक है कि संपूर्ण ऑब्जेक्ट ग्राफ मेमोरी में फिट हो)। यदि आप रुचि रखते हैं कि किसी SQLite बैकएंड पर कोर डेटा कैसे लागू किया जाता है, तो आप ओमनीग्रुप के OmniDataObjects ढांचे की जांच कर सकते हैं , जो कोर डेटा एपीआई के सबसेट का एक खुला स्रोत कार्यान्वयन है। BaseTen ढांचा भी PostgreSQL एक बैकेंड के रूप में उपयोग करते हुए कोर डेटा API के एक कार्यान्वयन है।

क्योंकि कोर डेटा SQLite के लिए एक ORM होने का इरादा नहीं है, यह मनमाना SQLite स्कीमा नहीं पढ़ सकता है। इसके विपरीत, आपको कोर डेटा के SQLite डेटा स्टोर को अन्य SQLite टूल के साथ पढ़ने में सक्षम होने पर भरोसा नहीं करना चाहिए; स्कीमा एक कार्यान्वयन विवरण है जो बदल सकता है।

इस प्रकार, सीधे कोर डेटा या SQLite का उपयोग करने के बीच वास्तव में कोई संघर्ष नहीं है। यदि आप एक रिलेशनल डेटाबेस चाहते हैं, तो SQLite (सीधे FMDB जैसे ऑब्जेक्टिव-सी रैपर में से एक के माध्यम से ) या एक रिलेशनल डेटाबेस सर्वर का उपयोग करें। हालाँकि, आप अभी भी ऑब्जेक्ट ग्राफ़ प्रबंधन ढांचे के रूप में उपयोग के लिए कोर डेटा सीखना चाह सकते हैं। Apple के कंट्रोलर क्लासेस और की-वैल्यू बाइंडिंग कम्पेटिबल व्यू विजेट्स के संयोजन में, आप बहुत कम कोड के साथ एक पूर्ण MVC आर्किटेक्चर को लागू कर सकते हैं ।


11
नोट fmdb ORM नहीं है, बस sqlite3 C api के आसपास एक objc रैपर है
रोबॉटोबोर 20

पकड़ने के लिए धन्यवाद; मैं पोस्ट अपडेट कर दूंगा।
बैरी वार्क

3
बहुत बढ़िया जवाब। FMDB को github - github.com/ccgus/fmdb पर ले जाया गया है - और एक NetNewsWire डेवलपर द्वारा अनुशंसित है: inessential.com/2010/02/26/on_switching_away_from_core_data
क्रिस डोलन

50
यदि आप कोर डेटा का उपयोग कर रहे हैं तो iOS 5.0 के साथ आपको iCloud फ़ाइल-सिंक का उपयोग करने में सक्षम होने का अतिरिक्त लाभ मिलता है। यदि आप सीधे SQLite का उपयोग कर रहे हैं, तो इसे iCloud में सिंक करने के लिए बहुत सी मैनुअल टिंकरिंग और कार्यान्वयन करना होगा।
विचित्र

1
Www.github.com/pmurphyjam/DBExample आज़माएं यह एक Xcode प्रोजेक्ट है जिसमें SQLite का उपयोग किया गया है।
पैट

46

और iOS 5.0 के साथ यदि आप कोर डेटा का उपयोग कर रहे हैं तो आपको iCloud फ़ाइल-सिंक का उपयोग करने में सक्षम होने का अतिरिक्त लाभ मिलता है। यदि आप सीधे SQLite का उपयोग कर रहे हैं, तो इसे iCloud में सिंक करने के लिए बहुत सी मैनुअल टिंकरिंग और कार्यान्वयन करना होगा।



3
यकीन है, लेकिन यह Apple के गर्व और खुशी को देखते हुए, उम्मीद है कि वे आगामी iOS संस्करणों में चीजों में सुधार करेंगे।
अजीब

4
अपडेट (डब्ल्यूडब्ल्यूडीसी 2016 के बाद) - कोर डेटा की आईक्लाउड कैबबिलिटीज़ को हटा दिया जा रहा है और संभवत: भविष्य में सेवानिवृत्त हो जाएगा। और अधिक: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
निकोले स्ववंदाज़ीव

35

कोर डेटा इतना डेटाबेस इंजन नहीं है क्योंकि यह एक एपीआई है जो वास्तविक डेटा स्टोर पर सार है। आप कोर डेटा को साइक्लाइट डेटाबेस, प्लिस्ट, बाइनरी फाइल या कस्टम डेटा स्टोर प्रकार के रूप में सहेजने के लिए कह सकते हैं।

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


13

SQLite कोर डेटा के लिए डेटाबेस स्वरूपों में से एक है। कोर डेटा का उपयोग करके आपको कोको एपीआई के बाकी हिस्सों के साथ बेहतर एकीकरण मिलता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.