Table of Contents
कोर डेटा iOS अनुप्रयोगों में बने रहने वाले ऑब्जेक्ट ग्राफ के प्रबंधन के लिए Apple का प्राथमिक ढांचा है। वर्चुंबकीय डेवलपर्स को कच्चे SQL लिखने या फ़ाइल सीरियलाइजेशन का प्रबंधन करने के बजाय, कोर डेटा एक उच्च स्तरीय ऑब्जेक्ट-उन्मुख इंटरफ़ेस प्रदान करता है जो स्टोरेज, चेंज ट्रैकिंग और डेटा मॉडलिंग की जटिलताओं को संभालता है। स्थानीय डेटा के साथ काम करने वाले प्रत्येक आईओएस डेवलपर को कोर डेटा की क्षमताओं और उत्तरदायी प्रदर्शन के बिना उत्तरदायी, डेटा युक्त ऐप बनाने के लिए सर्वोत्तम प्रथाओं को समझना चाहिए।
कोर डेटा आर्किटेक्चर को समझना
कोर डेटा केवल एक डेटाबेस नहीं है। यह एक ऑब्जेक्ट ग्राफ प्रबंधन ढांचा है जो डिस्क को डेटा जारी रख सकता है, लेकिन यह इन-मेमोरी ऑब्जेक्ट रिलेशन्स, undo प्रबंधन और सत्यापन का प्रबंधन भी करता है। आर्किटेक्चर चार प्रमुख घटकों के आसपास घूमती है जो एक साथ काम करने के लिए काम करती है जिसे आमतौर पर कोर डेटा स्टैक कहा जाता है।
कोर डेटा स्टैक
प्रत्येक कोर डेटा कार्यान्वयन को परिभाषित क्रम में जुड़े वस्तुओं का एक विशिष्ट सेट की आवश्यकता होती है। स्टैक में निम्नलिखित शामिल हैं:
- ]] स्क्रैचपैड जहां डेवलपर्स प्रबंधित वस्तुओं के साथ काम करते हैं। सभी बदलाव लगातार स्टोर में सहेजे जाने से पहले एक संदर्भ के अंदर होते हैं।
- ]Persistent स्टोर समन्वयक (NSPersistentStoreCoordinator): संदर्भ और वास्तविक लगातार स्टोर (s) के बीच एक पुल के रूप में कार्य करता है। यह डेटा अखंडता को एक्सेस करने और सुनिश्चित करने के लिए डेटा को मध्यस्थता करता है।
- प्रबंधित ऑब्जेक्ट मॉडल (NSManageObjectमॉडल): डेटा स्कीमा में संस्थाओं, विशेषताओं और संबंधों का वर्णन करता है। यह आमतौर पर .xcdatamodeld फ़ाइल में दृष्टि से परिभाषित किया जाता है।
- Persistent Store: वास्तविक भंडारण तंत्र, जो SQLite, बाइनरी या इन-मेमोरी हो सकता है। SQLite उत्पादन क्षुधा के लिए डिफ़ॉल्ट है।
आधुनिक आईओएस विकास अक्सर वर्ग का उपयोग करता है, जो स्वचालित रूप से पूरे स्टैक को बनाता है और कॉन्फ़िगर करता है। यह बॉयलरप्लेट को हटा देता है और गलत विन्यास की संभावना को कम करता है।
अपनी परियोजना में कोर डेटा की स्थापना
एक आईओएस परियोजना के लिए कोर डेटा जोड़ने के लिए कई जानबूझकर कदमों की आवश्यकता होती है, जिनमें से प्रत्येक डेटा प्रबंधन के लिए नींव बनाता है। प्रक्रिया एक डेटा मॉडल फ़ाइल बनाने के साथ शुरू होती है, फिर अपनी संस्थाओं को परिभाषित करती है, और अंत में अपने ऐप के जीवनचक्र के साथ स्टैक को एकीकृत करती है।
डेटा मॉडल बनाना
अपने Xcode प्रोजेक्ट में एक नई फ़ाइल जोड़कर शुरू करें Data Model टेम्पलेट (extension .xcdatamodeld) का उपयोग करके। इस दृश्य संपादक में, आप उन संस्थाओं को परिभाषित करते हैं (टेबल्स के बराबर), उनकी विशेषताओं (स्तंभों) और अन्य संस्थाओं के लिए संबंध। आप क्वेरी प्रदर्शन को अनुकूलित करने के लिए डेटा प्रकार, डिफ़ॉल्ट मान, सत्यापन नियम और अनुक्रमण विकल्प भी निर्दिष्ट कर सकते हैं।
संस्थाएँ और संबंध
प्रत्येक इकाई एक प्रकार का ऑब्जेक्ट है जिसका प्रबंधन उपयोगकर्ता, कार्य या उत्पाद जैसे होता है। गुण उस इकाई (नाम, मूल्य, तारीख, आदि) की विशेषताओं को परिभाषित करते हैं। रिश्ते इकाईयों को जोड़ते हैं, कोर डेटा को ऑब्जेक्ट ग्राफ़ को ट्रैक करने और स्वचालित रूप से हटाए जाने या अद्यतन करने के लिए सक्षम करते हैं। उदाहरण के लिए, एक "पर्सन" इकाई में "फोननंबर" संस्थाओं के लिए एक-से-मैनी संबंध हो सकता है, जो कोर डेटा किसी भी दिशा में ला सकता है।
जब संबंधों को डिजाइन करना, delete नियम पर ध्यान देना। विकल्पों में Nullify, Cascade, और Deny शामिल हैं। गलत नियम का चयन अप्रत्याशित डेटा हानि या अनाथ रिकॉर्ड का कारण बन सकता है। Cascade अक्सर माता-पिता के संबंधों के लिए उपयुक्त है, जबकि Nullify वैकल्पिक संघों के लिए अच्छी तरह से काम करता है।
एन्समैनेडऑब्जेक्ट सबक्लास का निर्माण
एक बार जब आपका इकाई मॉडल पूरा हो जाता है, तो Xcode स्वचालित रूप से प्रत्येक इकाई के लिए स्विफ्ट क्लास उत्पन्न कर सकता है। ये सबक्लास से विरासत में मिलती है और उन गुणों और संबंधों को शामिल करते हैं जिन्हें आप परिभाषित करते हैं। Xcode 8 से शुरू होकर, अनुशंसित दृष्टिकोण "Codegen" को ] क्लास डेफिनिशन (डिफ़ॉल्ट), जो व्युत्पन्न डेटा फ़ोल्डर में उत्पन्न फ़ाइलों को रखता है। वैकल्पिक रूप से, आप "मैनुअल / नियॉन" चुन सकते हैं और कस्टम तरीकों या कम्प्यूटेड गुणों को जोड़ने के दौरान उपयोगी अपना खुद का उपवर्ग बना सकते हैं।
CRUD संचालन करना
स्थान पर स्टैक के साथ, आप एक का उपयोग करके प्रबंधित ऑब्जेक्ट्स को सम्मिलित, ला सकते हैं, अद्यतन कर सकते हैं और हटा सकते हैं। सभी कार्यों को संदर्भ के भीतर किया जाना चाहिए, और परिवर्तन केवल एक सफल कॉल के बाद बने रहे हैं।
ऑब्जेक्ट बनाना और सेव करना
एक नई वस्तु डालने के लिए, का उपयोग करें और उसके बाद इसके गुण निर्धारित करें। सभी परिवर्तनों के बाद, ] को कॉल करें। हमेशा एक ]]] ब्लॉक में कॉल को सुरक्षित रखें ताकि त्रुटियों को आसानी से संभाल सकें, खासकर उपयोगकर्ता-प्रेरित कार्यों के दौरान।
Predicates और सॉर्ट Descriptors के साथ डेटा को आकर्षित करना
] ऑब्जेक्ट्स को क्वेरी करने के लिए प्राथमिक तंत्र है। आप ] (जैसे, ) और ]]] के साथ ऑर्डर परिणाम का उपयोग करके परिणाम को नियंत्रित कर सकते हैं। कोर डेटा भी मिश्रित भविष्यवाणी, सबकीरीज़ और उत्सुकता से संबंधों को लाने का समर्थन करता है। बड़े डेटासेट के लिए, हमेशा स्मृति उपयोग को कम करने के लिए [FLT: 1] के साथ लाने के आकार को सीमित करते हैं।
अद्यतन और हटाने
किसी वस्तु को अद्यतन करना संदर्भ में अपनी संपत्तियों को संशोधित करने के रूप में सरल है; कोर डेटा स्वचालित रूप से परिवर्तन को ट्रैक करता है। हटाने के लिए, को कॉल करें। बाद में संदर्भ को बचाने के लिए याद रखें। बैच के विलोपन के लिए, का उपयोग करें जो सीधे स्मृति में वस्तुओं को लोड किए बिना लगातार स्टोर में काम करता है, नाटकीय रूप से प्रदर्शन में सुधार करता है।
उत्पादन-रेडी कोर डेटा के लिए सर्वश्रेष्ठ अभ्यास
यहां तक कि एक अच्छी तरह से कॉन्फ़िगर कोर डेटा स्टैक भी एक बोतलबंद या बग का स्रोत बन सकता है यदि सावधानी से संभाला नहीं जाता है। स्थापित पैटर्न के बाद सुनिश्चित करता है कि आपका ऐप उत्तरदायी, स्थिर और स्केलेबल बनी हुई है।
थ्रेड सुरक्षा और कंसर्जेंसी
कोर डेटा संदर्भ डिफ़ॉल्ट रूप से थ्रेड-सुरक्षित नहीं हैं। थ्रेड्स के बीच एक संदर्भ साझा न करें। इसके बजाय, का उपयोग पृष्ठभूमि के संचालन के लिए एक निजी कतार संदर्भ बनाने के लिए ] पर किया जाता है। जब मुख्य धागे पर ऑब्जेक्ट्स तक पहुंचते हैं, तो या ]] का उपयोग थ्रेड कन्फाइनमेंट सुनिश्चित करने के लिए करें। SwiftUI के लिए, संपत्ति रैपर स्वचालित रूप से मुख्य संदर्भ पर परिवर्तन का निरीक्षण करता है, लेकिन भारी गीली अभी भी पृष्ठभूमि संदर्भों के लिए बंद हो जाना चाहिए।
संस्करण और माइग्रेशन
जैसा कि आपका ऐप विकसित होता है, आपका डेटा मॉडल बदल जाएगा-एडिंग विशेषताओं, नाम बदलने वाली संस्थाओं, या रिश्तों को बदलने का। कोर डेटा दो प्रकार के माइग्रेशन का समर्थन करता है: lightweight migration] और ]] कस्टम माइग्रेशन [[FLT: 3]]]]. लाइटवेट माइग्रेशन सरल परिवर्तन (Adding विशेषताओं, वैकल्पिकता को बदलने, एक पहचानकर्ता के साथ गुणों का नाम बदलने) स्वचालित रूप से अगर आप स्टोर को जोड़ते समय विकल्पों को पास करते हैं। जटिल परिवर्तनों के लिए, एक मैपिंग मॉडल बनाती है और [FLT: 20]]] सबक्लास को लागू करती है। हमेशा डेटा को पूरी तरह से भ्रष्ट करने में विफल होने पर परीक्षण किया जा सकता है।
निष्पादन अनुकूलन
कुशल कोर डेटा प्रदर्शन डेटा मॉडल डिजाइन के साथ शुरू होता है। indexes] का उपयोग करें जो अक्सर भविष्यवाणी में दिखाई देते हैं। जब केवल एक सबसेट की आवश्यकता होती है तो पूरे ऑब्जेक्ट ग्राफ़ को प्राप्त करने से बचें; बजाय, [[FLT: 21]] और [[FLT: 22]]] का उपयोग करें। कोर डेटा समर्थन faulting[FLT: 3]], जहां एक वस्तु की संपत्तियों तक पहुंच नहीं है। आप टेबल व्यू स्क्रॉल के दौरान "fault-firing" ओवरहेड से बचने के लिए [FLT: 24] के साथ संबंध तैयार कर सकते हैं।
त्रुटि हैंडलिंग
प्रत्येक ऑपरेशन को बचाने, बचाने और हटाने संभावित रूप से विफल हो सकता है। हमेशा इन कॉलों को ब्लॉकों में संलग्न करें और उपयोगकर्ता को सार्थक त्रुटि संदेश प्रस्तुत करें। विफलताओं को अक्सर सत्यापन त्रुटियों या बाधा उल्लंघन के कारण होता है, इसलिए त्रुटियों का सावधानीपूर्वक निरीक्षण करें। कोर डेटा की त्रुटि ऑब्जेक्ट में एकाधिक अंतर्निहित त्रुटियां होती हैं, जो आप विशिष्ट प्रतिक्रिया प्रदान करने के माध्यम से इसे निष्क्रिय कर सकते हैं। बैच ऑपरेशन के लिए, ] को उचित रूप से संभाल लें-नोट करें कि बैच डिलीट स्वचालित रूप से कैस्केड नहीं होती है, इसलिए आपको मैन्युअल रूप से संबंधित वस्तुओं को संभालने की आवश्यकता हो सकती है।
SwiftUI के साथ कोर डेटा को एकीकृत करना
SwiftUI संपत्ति रैपर और पर्यावरण मूल्यों के माध्यम से कोर डेटा के लिए प्रथम श्रेणी का समर्थन प्रदान करता है। रैपर स्वचालित रूप से मुख्य संदर्भ का निरीक्षण करता है और डेटा परिवर्तन के समय दृश्य को ताज़ा करता है। आप सॉर्ट डिक्रिप्टर को कॉन्फ़िगर कर सकते हैं और सीधे संपत्ति घोषणा में भविष्यवाणी कर सकते हैं। अधिक दानेदार नियंत्रण के लिए, प्रबंधित ऑब्जेक्ट संदर्भ को पर्यावरण में का उपयोग करते हुए इंजेक्षन किया। जब एक दृश्य मॉडल के लिए `@ObservedObject` या `@stateObject` के साथ काम करते हैं, तो यह सुनिश्चित करें कि देखने का मॉडल भारी संचालन करने पर पृष्ठभूमि संदर्भ का संदर्भ रखता है।
SwiftUI भी undo प्रबंधन को सरल बनाता है: [[FLT::29]] सेट करें, और SwiftUI स्वचालित रूप से सिस्टम के undo/redo इशारों के साथ एकीकृत होगा।
कोर डेटा बनाम अन्य दृढ़ता विकल्प
जबकि कोर डेटा आईओएस स्थानीय भंडारण के लिए सबसे परिपक्व और एकीकृत समाधान है, यह हमेशा सबसे अच्छा विकल्प नहीं है। इसे विकल्पों के साथ तुलना करें:
- UserDefaults: उपयोगकर्ता वरीयताओं की छोटी मात्रा के लिए उपयुक्त है, लेकिन जटिल या बड़े डेटा के लिए नहीं।
- Realm: एक सरल एपीआई और स्वचालित प्रतिक्रियाशील अद्यतन प्रदान करता है, लेकिन एक निर्भरता जोड़ता है और स्विफ्टयूआई के साथ गहराई से एकीकृत नहीं होता है।
- Raw SQLite: बहुत बड़े डेटासेट या जटिल प्रश्नों के लिए अधिकतम नियंत्रण और प्रदर्शन देता है, लेकिन मैन्युअल रूप से प्रबंधन कनेक्शन, माइग्रेशन और थ्रेडिंग की आवश्यकता होती है।
- CloudKit + कोर डेटा: iCloud सिंक की जरूरत वाले ऐप्स के लिए, Apple का पुल कोर डेटा और क्लाउडकीट, स्वचालित रूप से क्लाउड में स्थानीय परिवर्तनों को सिंक करता है।
अधिकांश मानक आईओएस ऐप्स के लिए जिन्हें संरचित डेटा, रिश्ते और ऑफ़लाइन क्षमता की आवश्यकता होती है, कोर डेटा प्लेटफॉर्म और चल रहे एप्पल सपोर्ट के साथ अपने सहज एकीकरण के कारण अनुशंसित विकल्प रहता है।
निष्कर्ष
कोर डेटा एक ऑब्जेक्ट ग्राफ प्रबंधन प्रणाली प्रदान करता है जो लगातार भंडारण, परिवर्तन ट्रैकिंग और संबंध प्रबंधन की जटिलताओं को दूर करता है। अपनी वास्तुकला को समझने से - प्रबंधित ऑब्जेक्ट संदर्भ से लगातार कंटेनर तक - और समवर्तीता, प्रदर्शन और त्रुटि हैंडलिंग के लिए सिद्ध प्रथाओं का पालन करते हुए, डेवलपर्स उन ऐप्स का निर्माण कर सकते हैं जो मजबूत और उत्तरदायी दोनों हैं। चाहे आप एक सरल टू-डू सूची या डेटा-इंटीग्रेटिव एंटरप्राइज एप्लिकेशन का निर्माण कर रहे हों, कोर डेटा का मास्टरिंग एक मूल्यवान कौशल है जो iOS पर कुशल स्थानीय डेटा प्रबंधन को अनलॉक करता है।
आगे के अध्ययन के लिए, Apple Core Data document, कोर डाटा प्रोग्रामिंग गाइड], और सामुदायिक संसाधनों जैसे Ray Wenderlich's Core Data by Tutorial]]]] for hand-on अभ्यास और माइग्रेशन और समवर्ती जैसे उन्नत विषयों में गहरी अंतर्दृष्टि।