2011-03-22 19 views
5

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

आदर्श रूप से इसे बाइनरी डेटा (128-बिट्स में) के रूप में संग्रहीत किया जाएगा, लेकिन क्या ऐसा करने में कोई तत्काल समस्याएं हैं? एनएसएसटींग के बजाए यह इस तरह से अधिक कुशल आकार के रूप में संग्रहीत होगा, लेकिन मैं सिर्फ यह जांचना चाहता हूं कि इसे बाइनरी डेटा के रूप में संग्रहीत करने के साथ कोई प्रदर्शन समस्या नहीं है। क्या यह अभी भी बाइनरी डेटा के रूप में ठीक से अनुक्रमित किया जाएगा? क्या परिवर्तनीय चौड़ाई वाले क्षेत्र में प्रभावी ढंग से तय-चौड़ाई बाइनरी डेटा को संग्रहीत करने के कोई नुकसान हैं?

मैं SQLite से अधिक परिचित नहीं हूं और इसकी स्टोरेज/इंडेक्सिंग तंत्र इसलिए कुछ सलाह के लिए पहुंचना चाहता था!

+0

अंतर्निहित GUID प्रकार का उपयोग करने में समस्या क्या है? जाहिर है आप एक यूयूआईडी को एक स्ट्रिंग के रूप में स्टोर नहीं करना चाहते हैं, लेकिन इसके लिए एक विशिष्ट डीबी प्रकार है। –

+0

कोर डेटा में कोई GUID विशेषता प्रकार नहीं है। यदि GUID द्वारा आपका मतलब कोर डेटा द्वारा प्रबंधित प्रबंधित ऑब्जेक्ट आईडी है, तो यह एक विकल्प नहीं है क्योंकि आईडी को कई अलग-अलग प्रणालियों में लगातार और अद्वितीय होना आवश्यक है। –

उत्तर

3

आप इनमें से कितने स्टोरिंग की योजना बना रहे हैं? उन्हें बाइनरी डेटा के रूप में संग्रहीत करना लगभग 50% बचाता है - बाइनरी डेटा बनाम लगभग 20 बाइट्स स्ट्रिंग के रूप में लगभग 40 बाइट बनाते हैं। तो आप प्रति हजार यूयूआईडी के पूरे 20K को बचाने के बारे में बात कर रहे हैं, जो इतना नहीं है कि मैं इसके बारे में चिंता करता हूं। हालांकि, अगर आप वास्तव में उन्हें बाइनरी डेटा के रूप में सहेजना चाहते हैं, तो आप उन्हें NSData ऑब्जेक्ट्स के रूप में संग्रहीत करके कर सकते हैं।

+0

क्या आप जानते हैं कि "बाइनरी डेटा" फ़ील्ड सही तरीके से अनुक्रमित हैं या नहीं? –

+0

क्या आपने अपने मॉडल में उस विशेषता के लिए "अनुक्रमित" ध्वज सेट किया था? – Caleb

+0

हां यह चुराया गया है। मैं बस किसी भी आंतरिक समस्या या चीज़ों के बारे में सोच रहा हूं जो मुझे छोटे ब्लब्स को संग्रहित और अनुक्रमणित करने के बारे में जानना चाहिए। –

0

मैं अपने यूयूआईडी को "ट्रांसफॉर्मेबल" के रूप में स्टोर करता हूं और यह अच्छी तरह से काम करता है। अपने मूल डेटा मॉडल (.xcdatamodel फ़ाइल) में एक विशेषता नाम uuid साथ प्रकार के साथ @NSManaged var uuid: NSUUID!

  • , बनाने Transformable

  • का पता कर काम करता है:

    1. यह आपके NSManagedObject उपवर्ग में जोड़े ठीक है, मैं अपने भविष्यवाणियों को इस तरह खोजने के लिए लिखता हूं:

      request.predicate = NSPredicate(format: "uuid == %@", withUuid)

    6

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

    enter image description here

    फिर आप UUID का उपयोग कर अपने कोर डाटा वस्तुओं लाने कर सकते हैं (Obj सी, NSUUID में)।

    static func fetch(with identifier: UUID) -> AudioRecord? { 
        var record: AudioRecord? 
        moc.performAndWait { 
         let fetchRequest = AudioRecord.request 
         fetchRequest.predicate = NSPredicate(format: "identifier == %@", identifier as CVarArg) 
         fetchRequest.fetchLimit = 1 
         record = (try? fetchRequest.execute())?.first 
        } 
        return record 
    } 
    
    +0

    क्या मुझे 'पहचानकर्ता' मान सेट करना है, या यह मेरे लिए स्वचालित रूप से बनाया गया है? – matt

    +0

    @matt आपको मैन्युअल रूप से 'पहचानकर्ता' सेट करने की आवश्यकता है। – Jonny

    +0

    मैं मानता हूं, ऐसा लगता है कि यह जीवन शून्य के रूप में शुरू होता है। यह मूर्खतापूर्ण प्रतीत होता है, क्योंकि यह स्पष्ट है कि इसका मतलब यूयूआईडी होना चाहिए, लेकिन मेरे पास पहले से ही यूयूआईडी सेट करने के लिए कोड था, इसलिए यह कोई अतिरिक्त काम नहीं है। धन्यवाद! – matt