2016-10-31 3 views
13

Firebase डेटा मॉडल बदलने के लिए सबसे अच्छा तरीका क्या है जबकि आपके उत्पादन में आपके आईओएस ऐप के कई संस्करण हैं?फायरबेस डेटा मॉडल बदलना (जबकि एकाधिक ऐप संस्करण उत्पादन में हैं)

चूंकि मध्य में कोई 'एप्लिकेशन सर्वर' परत नहीं है, इसलिए डेटाबेस मॉडल में कोई भी परिवर्तन ऐप के पुराने संस्करणों को तोड़ सकता है।

प्रदर्शन संबंधित समस्या का उदाहरण:

संस्करण 1.0 मैं भोलेपन के तहत एक पोस्ट '/ पदों /' से संबंधित सब कुछ रखने गया था। अब संस्करण 2.0 में मैं फायरबेस की सिफारिश लेना चाहता हूं और किसी दिए गए उपयोगकर्ता के लिए सभी पोस्टों को त्वरित रूप से सूचीबद्ध करने के लिए '/ user-post' एंडपॉइंट जोड़ना चाहता हूं।

आईओएस ऐप के संस्करण 1.0 का उपयोग करने वाले लोग '/ user-posts' पर कोई भी डेटा नहीं लिख रहे हैं क्योंकि उस एंडपॉइंट का अस्तित्व नहीं था। संस्करण 2.0 का उपयोग करने वाले लोग इसलिए ऐप के पुराने संस्करण का उपयोग करके लोगों द्वारा बनाई गई कोई भी पोस्ट नहीं देखते हैं।

सिद्धांत रूप में मैं कहीं भी एक सर्वर बना सकता हूं जो '/ post /' पर परिवर्तनों को सुनता है और उन्हें '/ user-posts' में भी जोड़ता है। ऐसा लगता है कि समय के साथ बनाए रखना मुश्किल है, हालांकि यदि आपके ऐप के बहुत सारे संस्करण हैं।

समस्या की नई सुविधा उदाहरण:

चलें अपने मोबाइल एप्लिकेशन के संस्करण 1.0 में कहते हैं कि तुम को नए ब्लॉग पोस्ट लिखने '/ पदों /'। अब आपके ऐप के संस्करण 2.0 में आप एक टीम सुविधा पेश करते हैं और सभी पोस्टों को '/ टीम/टीम-आईडी/पोस्ट' में होना आवश्यक है।

जो लोग संस्करण 2.0 में अपग्रेड नहीं किए गए हैं वे अभी भी '/ पोस्ट' पर लिखेंगे। वे पोस्ट संस्करण 2.0 का उपयोग करने वाले लोगों के लिए दृश्यमान नहीं होंगे जो '/ टीम/टीम-आईडी/पोस्ट' से पढ़ रहे हैं।

मुझे एहसास है कि आप दोनों अंतराल को एक साथ रख सकते हैं (और टीम आईडी पर आधारित इंडेक्स/पोस्ट) लेकिन समय के साथ यह बनाए रखना मुश्किल लगता है।

पारंपरिक समाधान:

अगर मैं कुछ Django या एक्सप्रेस जैसे मैं एक डेटाबेस प्रवास करना चाहते हैं और फिर ब्लॉगपोस्ट बनाने के लिए सर्वर साइड अंतिम बिंदुओं को अद्यतन उपयोग कर रहे थे।

इससे ग्राहकों से डेटाबेस में परिवर्तन आएंगे। मैं सिद्धांत में Firebase के साथ मेरी वास्तुकला के लिए एक आवेदन-सर्वर स्तरीय जोड़ सकता है, लेकिन यह नहीं लगता है जैसे कि यह अनुशंसा की जाती है: https://firebase.googleblog.com/2013/03/where-does-firebase-fit-in-your-app.html

+1

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

उत्तर

3

मैं तुम्हें Firebase Remote Config का उपयोग UIAlertController या अलग स्क्रीन के माध्यम से एक सूचना दिखाएंगे के लिए एक अद्यतन है अगर सुझाव है उपलब्ध। आप उपयोगकर्ता को वर्तमान संस्करण में अपडेट करने के लिए मजबूर कर सकते हैं और आपको बाद में कोई समस्या नहीं है क्योंकि पुराने कोड के साथ कोई पोस्ट नहीं बनाई जा सकती है।

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

भविष्य की समस्याओं को रोकने के लिए आपके में app-version नाम की एक सामान्य संपत्ति हो सकती है। प्रत्येक पोस्ट से पहले ऐप जांचता है कि कोई नया संस्करण है या नहीं। यदि उपयोगकर्ता पोस्ट नहीं जोड़ सकता है लेकिन यदि कोई नया संस्करण है तो आप UIAlertController

+0

सुझाव के लिए धन्यवाद। मैंने उन्नयन को मजबूर करने पर विचार किया था, लेकिन यह एक गरीब यूएक्स की तरह लगता है। मैं एफबी से सीधे सभी पढ़ता हूं, लेकिन प्रॉक्सी एक सर्वर के माध्यम से लिखता है। जब कोई स्कीमा परिवर्तन होता है, तो सर्वर पुराने स्थान और नए स्थान पर पोस्ट को दोहराता है। –

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