2011-09-08 19 views
10

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

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

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

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

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

ऐसा करने पर मैं "अपडेटिंग ऐप" या उपयोगकर्ता को कुछ प्रदर्शित करूंगा।

अगला बात, लाइन के साथ कहीं भी कोई त्रुटि होने पर और अपडेट विफल होने पर क्या होता है। डीबी पुराना हो जाएगा और ऐप ठीक से काम नहीं करेगा क्योंकि यह एक नए संस्करण की अपेक्षा करता है?

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

इस पर किसी भी विचार की सराहना की जाएगी। :)

धन्यवाद!

+2

आवेदन शुरू करने पर डीबी संरचना को बदलना ठीक होना चाहिए। बस यह सुनिश्चित करें कि यह सही तरीके से किया गया है और उपयोगकर्ता को इस समय के दौरान अपने ऐप से बातचीत करने से रोकें (जो बहुत अधिक समय नहीं लेना चाहिए)। जैसा कि आपने पहले कहा था, संस्करण संख्या को डिफ़ॉल्ट में कहीं भी रखें और स्टार्टअप पर संस्करण संख्याओं की तुलना करें। – tilo

+0

[एटी] जॉन टोप्ली, वर्तनी सुधार के लिए धन्यवाद। मुझे मूर्ख। ;) @ टिलो यही मैं अभी कर रहा हूं, यह एक अच्छा दृष्टिकोण की तरह लगता है। धन्यवाद। :) – conor

उत्तर

5

सबसे पहले, जिस दृष्टिकोण पर आप विचार कर रहे हैं वह सही है। इसे डेटाबेस माइग्रेशन के रूप में जाना जाता है। जब भी आप अपने अंत में डेटाबेस को संशोधित करते हैं, तो आपको माइग्रेशन स्क्रिप्ट में उचित ALTER TABLE... आदि विधियों को एकत्र करना चाहिए।

फिर आपके ऐप की अगली रिलीज को सभी उपयोगकर्ता के डेटा माइग्रेट करने के लिए एक बार इस कोड को चलाया जाना चाहिए (जैसा आपने बताया है)।

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

+0

अच्छा लगता है, जब आप उचित वैकल्पिक तालिका इकट्ठा करते हैं ... आदि क्या आपका मतलब है कि मेरे SQLite ऐप द्वारा जेनरेट की गई एक प्रतिलिपि रखें क्योंकि मैं परिवर्तन कर रहा हूं? अच्छा विचार। धन्यवाद। – conor

+1

हां, यदि आप डीबी को बदलने के लिए ऐप का उपयोग कर रहे हैं तो उसके द्वारा जेनरेट किए गए आदेशों की प्रति बनाएं। मैं व्यक्तिगत रूप से MyDB_v1.sql से शुरू होने वाली .sql फ़ाइलों का एक गुच्छा रखूंगा जिसमें प्रारंभिक CREATE स्टेटमेंट्स हैं, जैसे ही मैं सामान बदलना शुरू करता हूं, फिर MyDB_migrate_v1_to_v2.sql बनाएं। इसमें डीबी को संशोधित करने के लिए कोई आदेश शामिल है। एक बार रिहाई हो जाने के बाद, मैं MyDB_migrate_v2_to_v3.sql बनाउंगा और इसका उपयोग किसी और माइग्रेशन आदि को रखने के लिए करूँगा, –

+0

ठीक है, एक और बात। प्रारंभिक रिलीज के बाद से मैंने किसी भी बदलाव का ट्रैक नहीं रखा है, ठीक है क्योंकि ऐप वर्तमान में उपयोगकर्ता डेटा स्टोर नहीं करता है। मैं एक अपवाद के साथ, डीबी कोई समस्या ओवरराइड कर सकते हैं। ऐप डीबी को पुस्तकें/अध्याय डाउनलोड करता है। 4.3.3 में वाईफाई बग को देखते हुए इसमें काफी समय लगता है। मुझे आश्चर्य है कि डाउनलोड की गई पुस्तकों को नए डीबी में स्थानांतरित करते समय मैं उपयोगकर्ताओं के पक्ष में वास्तविक डीबी फ़ाइल को प्रतिस्थापित कर सकता हूं? – conor

संबंधित मुद्दे