2011-03-08 11 views
7

के लिए एक JSON स्टोर बनाना हमारे पास बहुत से ऐप्स हैं जहां हम दूरस्थ वेब सेवाओं से डेटा जेएसओएन के रूप में प्राप्त करते हैं और उसके बाद कोर-डेटा मॉडल में अनुवाद करने के लिए एक पार्सर का उपयोग करते हैं।आईफोन

हमारे ऐप्स में से एक के लिए, मुझे लगता है कि हमें कुछ अलग करना चाहिए।

यह एप्लिकेशन केवल पढ़ने के लिए डेटा, जो है अस्थिर और इसलिए नहीं बहुत लंबे के लिए स्थानीय रूप से कैश है। JSON गहराई से पदानुक्रमघोंसला वाले "ऑब्जेक्ट्स" के साथ है। दस्तावेज़ों में आमतौर पर 20 से अधिक शीर्ष स्तर के आइटम नहीं होते हैं, लेकिन यह 100K तक हो सकता है।

मुझे नहीं लगता कि मैं 100 इकाइयों के साथ कोर डेटा मॉडल बनाना चाहता हूं, और उसके बाद JSON आयात करने के लिए मैपर का उपयोग करना चाहता हूं। ऐसा लगता है कि इस तरह के एक गीत और नृत्य। मुझे लगता है कि मैं बस जेएसओएन को कहीं भी आसान बनाना चाहता हूं, और इसकी पूछताछ करने की क्षमता है। मोंगो डीबी ठीक होगा, अगर यह आईफोन पर चला।

क्या आईफोन पर एक JSON दस्तावेज़ स्टोर है जो पूछताछ का समर्थन करता है?

या, क्या मैं डेटा को किसी प्रकार के निरंतर NSDictionary में परिवर्तित करने के लिए कुछ JSON पार्सर का उपयोग कर सकता हूं और क्वेरी का उपयोग कर क्वेरी कर सकता हूं?

या शायद जेएसओएन संरचनाओं पर मैन्युअल रूप से बनाए गए इंडेक्स के साथ एक ब्लॉब स्टोर के रूप में SQLite का उपयोग करें?

या, क्या मुझे चमकना बंद करना चाहिए, और कोर डेटा का उपयोग करना चाहिए? :)

सहायता की सराहना की।

+0

मैं एक आईपैड ऐप के लिए इस सटीक दृष्टिकोण का उपयोग करता हूं। मोनो टच ने वास्तव में इसे बहुत तेजी से करने में मदद की ... – kwcto

+0

ifwdev - आह शांत, क्या आप और समझा सकते हैं? क्या आपने ब्लब्स स्टोर किया था? मोनोटच क्यों? – tobinharris

उत्तर

31

यह तय करते समय कि किस निरंतरता का उपयोग करना है, यह याद रखना महत्वपूर्ण है कि कोर डेटा सबसे पहले और सबसे महत्वपूर्ण ऑब्जेक्ट ग्राफ़ प्रबंधन प्रणाली है। यह वास्तविक कार्य मॉडल-व्यू-कंट्रोलर डिज़ाइन पैटर्न वाले ऐप्स की रनटाइम मॉडल परत बनाना है। दृढ़ता वास्तव में कोर डेटा का एक माध्यमिक और यहां तक ​​कि वैकल्पिक कार्य है।

प्रमुख मॉडलिंग/दृढ़ता चिंता डेटा का आकार और डेटा की जटिलता है। तो, रिश्तेदार ताकत और दृढ़ता के प्रत्येक प्रकार की कमजोरियों इस तरह टूट जाएगा: अस्थिरता यानी

_______________________________ 
    |    |    | 
    2 |    |    | 
    | SQL   | Core Data | 4 
s |    |    | 
i |_______________ ______________| 
z |    |    | 
e |    |    | 
    1 | Collection | Core Data | 3 
    | plist/xml |    | 
    |    |    | 
    ------------------------------- 
       Complexity--->  

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

(1) तो डेटा की आकार, जटिलता और अस्थिरता कम है, फिर संग्रह का उपयोग करें एक सीरियलाइज्ड कस्टम ऑब्जेक्ट का एनएसएआरएआरई, एनएस डिक्शनरी, एनएसएससेट सबसे अच्छा विकल्प होगा। संग्रह पूरी तरह से स्मृति में पढ़ा जाना चाहिए ताकि उनके प्रभावी दृढ़ता आकार को सीमित किया जा सके। उनके पास कोई जटिलता प्रबंधन नहीं है और सभी परिवर्तनों को पूरी दृढ़ता फ़ाइल को फिर से लिखने की आवश्यकता होती है।

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

(3) चूंकि डेटा अधिक जटिल हो जाता है कोर डेटा जल्दी से बेहतर हो जाता है। "प्रबंधित वस्तुओं" का "प्रबंधित" हिस्सा संबंधों और व्यवहारों में जटिलता का प्रबंधन करता है। संग्रह या एसक्यूएल के साथ, आपने जटिलता को मैन्युअल रूप से प्रबंधित किया है और स्वयं को तुरंत बदल सकता है। असल में, मैंने लोगों को एसक्यूएल के साथ जटिल डेटा प्रबंधित करने की कोशिश की है जो अपना लघु कोर डेटा स्टैक लिखना समाप्त कर देते हैं। कहने की जरूरत नहीं है, जब आप अस्थिरता के साथ जटिलता को जोड़ते हैं तो कोर डेटा भी बेहतर होता है क्योंकि यह सम्मिलन और स्वचालित रूप से हटाने के दुष्प्रभावों को संभालता है।

(इंटरफ़ेस की जटिलता भी एक चिंता का विषय है। एसक्यूएल एक बड़े, स्थिर विलक्षण तालिका संभाल कर सकते हैं लेकिन जब आप टेबल के पदानुक्रम में जोड़ने जिसमें मक्खी पर परिवर्तित कर सकते हैं, एसक्यूएल एक बुरा सपना हो जाता है। कोर डाटा, NSFetchedResultsController और UITableViewController/प्रतिनिधि इसे छोटा बनाते हैं।)

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

इसके अलावा, "कोर डेटा को उच्च ओवरहेड" के साथ, "मैं पूरी तरह से एसक्यूएल समझता हूं लेकिन कोर डेटा नहीं समझता"। यह वास्तव में नहीं करता है। यहां तक ​​कि जब कोर डेटा दृढ़ता से डेटा प्राप्त करने का सबसे सस्ता तरीका नहीं है, तब भी शेष एपीआई के साथ एकीकरण आमतौर पर बेहतर परिणाम उत्पन्न करता है जब आप विकास और विश्वसनीयता की गति में कारक होते हैं।

इस विशेष मामले में, मैं विवरण से नहीं बता सकता कि आप मामले में हैं (2) या केस (4)। यह डेटा की आंतरिक जटिलता और यूआई की जटिलता पर निर्भर करता है। आप कहते हैं कि:

मुझे नहीं लगता कि मैं संस्थाओं के 100 के साथ एक कोर डाटा मॉडल बनाना चाहते हैं, और तो इसे में JSON आयात करने के लिए एक नक्शाकार का उपयोग करें।

क्या आपका वास्तविक वास्तविक संस्थाएं या केवल प्रबंधित वस्तुओं का मतलब है? याद रखें, संस्थाएं प्रबंधित वस्तुओं के लिए होती हैं कि कौन से वर्ग उदाहरण हैं। यदि पूर्व, तो हाँ कोर डेटा सामने बहुत काम करेगा, अगर बाद वाला, तो यह नहीं होगा। आप केवल दो या तीन संबंधित इकाइयों के साथ बहुत बड़े जटिल ग्राफ का निर्माण कर सकते हैं।

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

कोर डेटा आपको पहली नज़र में स्पष्ट होने की तुलना में अधिक विकल्प देता है।

+0

विस्तृत प्रतिक्रिया के लिए धन्यवाद, कोर डेटा किक की शक्तियों का एक अच्छा ब्रेकडाउन यूप, हमारे पास 100 इकाइयां (कक्षाएं) हैं, इसलिए ऐसा लगता है कि कोर डेटा बहुत काम करेगा। – tobinharris

+1

ठीक है, यदि आपके पास डेटा के 100 से तार्किक रूप से अलग-अलग हिस्सों हैं, जिनमें सभी को अलग-अलग व्यवहार की आवश्यकता है, तो यह वैसे भी बहुत काम करेगा। यदि आप एसक्यूएल का उपयोग करते हैं, तो आपको स्टोर करने के लिए 100 टेबल की आवश्यकता होगी। अधिक संभावना है कि आपको वास्तव में केवल एक या कुछ सामान्य संस्थाओं की आवश्यकता है जिन्हें आप मनमाने ढंग से जटिलता की वृक्ष संरचना उत्पन्न करने के लिए उपयोग कर सकते हैं। – TechZen

+0

धन्यवाद। जब आप जेनेरिक इकाइयां कहते हैं, तो क्या आप उन संस्थाओं में बीएलओबी में जेएसओएन स्टोर करना चाहते हैं? चूंकि हम जिन JSON को ला रहे हैं उनमें कई अलग-अलग "इकाइयां" हैं, इसलिए मुझे यकीन नहीं है कि वृक्ष संरचना बनाने के लिए जेनेरिक इकाइयों का उपयोग करके आपका क्या मतलब है। – tobinharris

0

JSON Framework एक है। यह आपके JSON को देशी NSDictionary और NSArray ऑब्जेक्ट्स में बदल देगा। मुझे इस तरह के बड़े दस्तावेज़ पर अपने प्रदर्शन के बारे में कुछ नहीं पता है, लेकिन बहुत से लोग इसका इस्तेमाल करते हैं और इसे पसंद करते हैं। यह आईओएस के लिए एकमात्र JSON लाइब्रेरी नहीं है, लेकिन यह एक लोकप्रिय है।

+0

उल्लेख के लिए धन्यवाद, मैंने सोचा था कि यह अच्छा हो सकता है! – tobinharris

4

मैं जेएसओएन को एनएसडीडीज़ में पार्स करने के लिए SBJson का उपयोग करता हूं, फिर उन्हें [dict writeToFile:saveFilePath atomically:YES] का उपयोग करके .plist फ़ाइलों के रूप में सहेजें। लोडिंग उतनी सरल है जितनी सरल NSMutableDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:saveFilePath]। इसका तेज़, कुशल और आसान है। डेटाबेस के लिए कोई ज़रूरत नहीं है।

+0

धन्यवाद, क्या आप जानते हैं कि एसबीजेसन कैसे http://code.google.com/p/json-framework/ की तुलना करता है? – tobinharris

+0

प्रतिक्रिया में देरी के बारे में खेद है - यह वही कोड है, टोबिन। मैं बस इसे मुख्य श्रेणी का नाम कहता हूं। – Hiltmon