यहां मैंने जो कुछ सीखा है, वह अपने वर्तमान एप्लिकेशन प्रोजेक्ट के एक जोड़े के साथ आगे बढ़ने का सबसे अच्छा तरीका निर्धारित करता है।
Async स्टोरेज ("मूल निवासी को प्रतिक्रिया के लिए" "अंतर्निहित")
मैं इन-प्रोडक्शन ऐप के लिए AsyncStorage का उपयोग करता हूं। स्टोरेज डिवाइस के लिए स्थानीय रहता है, अनएन्क्रिप्टेड (जैसा कि दूसरे उत्तर में बताया गया है) है, अगर आप ऐप को हटाते हैं, तो दूर चला जाता है, लेकिन आपके डिवाइस के बैकअप के भाग के रूप में सहेजा जाना चाहिए और अपग्रेड के दौरान बनी रहती है (दोनों मूल उन्नयन ala TestFlight और कोड उन्नयन CodePush के माध्यम से )।
निष्कर्ष: स्थानीय भंडारण; आप अपना खुद का सिंक / बैकअप समाधान प्रदान करते हैं।
SQLite
मैंने जिन अन्य परियोजनाओं पर काम किया है, उन्होंने ऐप स्टोरेज के लिए sqlite3 का उपयोग किया है। यह आपको एसक्यूएल जैसा अनुभव देता है, जिसमें कंप्रेसेबल डेटाबेस होते हैं जिन्हें डिवाइस से और उससे भी ट्रांसमिट किया जा सकता है। मेरे पास उन्हें पीछे के छोर के साथ समन्वयित करने का कोई अनुभव नहीं था, लेकिन मुझे लगता है कि विभिन्न पुस्तकालय मौजूद हैं। SQLite से कनेक्ट करने के लिए RN लाइब्रेरी हैं।
डेटा को आपके पारंपरिक डेटाबेस प्रारूप में डेटाबेस, टेबल, चाबियाँ, सूचकांक आदि के साथ संग्रहीत किया जाता है, जो सभी को एक बाइनरी प्रारूप में डिस्क पर सहेजा जाता है। डेटा तक सीधी पहुंच कमांड लाइन या उन ऐप्स के माध्यम से उपलब्ध है जिनमें SQLite ड्राइवर हैं।
निष्कर्ष: स्थानीय भंडारण; आप सिंक और बैकअप की आपूर्ति करते हैं।
Firebase
अन्य चीजों के अलावा, एक JSON दस्तावेज़ स्टोर (जैसे MongoDB) के साथ एक वास्तविक समय noSQL डेटाबेस के साथ Firebase ऑफ़र, ग्राहकों की संख्या को 1 से n तक सिंक्रनाइज़ रखने के लिए है। डॉक्स ऑफ़लाइन दृढ़ता के बारे में बात करते हैं, लेकिन केवल मूल कोड (स्विफ्ट / ओबज-सी, जावा) के लिए। Google का स्वयं का जावास्क्रिप्ट विकल्प ("वेब") जो कि रिएक्ट नेटिव द्वारा उपयोग किया जाता है, कैश्ड स्टोरेज विकल्प प्रदान नहीं करता है (नीचे 2/18 अपडेट देखें)। पुस्तकालय को इस धारणा के साथ लिखा गया है कि एक वेब ब्राउज़र कनेक्ट होने जा रहा है, और इसलिए एक अर्ध-स्थायी कनेक्शन होगा। आप शायद फायरबेस स्टोरेज कॉल्स के पूरक के लिए एक स्थानीय कैशिंग तंत्र लिख सकते हैं, या आप देशी पुस्तकालयों और रिएक्ट नेटिव के बीच एक पुल लिख सकते हैं।
अद्यतन 2/2018
मैंने पाया के बाद से है प्रतिक्रिया मूल निवासी Firebase जो देशी iOS और Android के पुस्तकालयों के लिए एक संगत जावास्क्रिप्ट इंटरफेस प्रदान करता है (क्या गूगल शायद / किया जाना चाहिए सकता है), तो आप प्रतिक्रिया के बोनस के साथ देशी पुस्तकालयों के सभी उपहार दे रही है मूल समर्थन। वास्तविक समय डेटाबेस के बगल में एक JSON दस्तावेज़ स्टोर के Google की शुरुआत के साथ, मैं कुछ वास्तविक समय के उन ऐप्स के लिए फायरबेज़ को एक अच्छा दूसरा रूप दे रहा हूं जिन्हें मैं बनाने की योजना बना रहा हूं।
रियल-टाइम डेटाबेस को JSON जैसे पेड़ के रूप में संग्रहीत किया जाता है जिसे आप वेबसाइट पर संपादित कर सकते हैं और बहुत ही सरलता से आयात / निर्यात कर सकते हैं।
निष्कर्ष: प्रतिक्रिया-मूल-फायरबेस के साथ, आरएन को स्विफ्ट और जावा के समान लाभ मिलते हैं। [/ अद्यतन] नेटवर्क से जुड़े उपकरणों के लिए अच्छी तरह से तराजू। कम उपयोग के लिए कम लागत। अन्य Google क्लाउड ऑफ़र के साथ अच्छी तरह से संयोजित करता है। डेटा उनके इंटरफ़ेस से आसानी से दिखाई और संपादन योग्य है।
क्षेत्र
अपडेट 4/2020
MongoDB ने दायरे को हासिल कर लिया है और इसे MongoDB Stitch (नीचे चर्चा की गई) के साथ संयोजित करने की योजना बना रहा है। यह बहुत रोमांचक लगता है ।
साथ ही एक वास्तविक समय ऑब्जेक्ट स्टोर जिसमें ऑटोमैजिक नेटवर्क सिंक्रोनाइज़ेशन हो। वे खुद को "डिवाइस पहले" के रूप में बताते हैं और डेमो वीडियो दिखाता है कि कैसे उपकरण छिटपुट या हानिपूर्ण नेटवर्क कनेक्टिविटी को संभालते हैं।
वे ऑब्जेक्ट स्टोर का एक नि: शुल्क संस्करण प्रदान करते हैं जिसे आप अपने स्वयं के सर्वर पर या एडब्ल्यूएस या एज़्योर जैसे क्लाउड समाधान में होस्ट करते हैं। आप इन-मेमोरी स्टोर भी बना सकते हैं जो डिवाइस, डिवाइस-ओनली स्टोर्स के साथ नहीं बने रहते हैं, जो सर्वर, रीड-ओनली सर्वर स्टोर्स, और एक या अधिक डिवाइसेज़ में सिंक्रोनाइज़ेशन के लिए पूर्ण रीड-राइट विकल्प के साथ सिंक नहीं करते हैं। उनके पास पेशेवर और उद्यम विकल्प हैं जो फायरबेस की तुलना में प्रति माह अधिक खर्च करते हैं।
फायरबेस के विपरीत, सभी रियलिटी क्षमताओं को रिएक्ट नेटिव और ज़ैमरीन में समर्थन दिया जाता है, जैसे कि वे स्विफ्ट / ओबजैक / जावा (देशी) ऐप में हैं।
आपका डेटा आपके कोड में ऑब्जेक्ट्स से बंधा हुआ है। क्योंकि वे परिभाषित वस्तुएं हैं, आपके पास एक स्कीमा है, और कोड नियंत्रण कोड पवित्रता के लिए आवश्यक है। सीधी पहुंच जीयूआई उपकरण के माध्यम से उपलब्ध है। ऑन-डिवाइस डेटा फाइलें क्रॉस-प्लेटफॉर्म संगत हैं।
निष्कर्ष: डिवाइस पहले, मुफ्त और सशुल्क योजनाओं के साथ वैकल्पिक सिंक्रनाइज़ेशन। सभी सुविधाएँ रिएक्टिव नेटिव में समर्थित हैं। फायरबेस की तुलना में क्षैतिज स्केलिंग अधिक महंगा है।
iCloud
मैंने ईमानदारी से इस एक के साथ बहुत खेल नहीं किया है, लेकिन निकट भविष्य में ऐसा करूंगा।
यदि आपके पास एक मूल ऐप है जो CloudKit का उपयोग करता है, तो आप अपने ऐप के कंटेनरों को एक वेब ऐप (या हमारे मामले में, React Native) से कनेक्ट करने के लिए CloudKit JS का उपयोग कर सकते हैं। इस परिदृश्य में, आपके पास संभवतः एक मूल iOS ऐप और एक प्रतिक्रियाशील मूल निवासी Android ऐप होगा।
दायरे की तरह, यह डेटा को स्थानीय रूप से संग्रहीत करता है और संभव होने पर इसे iCloud में सिंक करता है। आपके ऐप के लिए सार्वजनिक स्टोर और प्रत्येक ग्राहक के लिए निजी स्टोर हैं। ग्राहक अपने स्टोर या ऑब्जेक्ट को अन्य उपयोगकर्ताओं के साथ साझा करने के लिए भी चुन सकते हैं।
मुझे नहीं पता कि कच्चे डेटा तक पहुंचना कितना आसान है; स्कीमा एप्पल की साइट पर स्थापित किया जा सकता है।
निष्कर्ष: Apple- लक्षित ऐप्स के लिए बढ़िया।
काउचबेस
बड़ा नाम, इसके पीछे बहुत सारी बड़ी कंपनियां। मानक समर्थन लागत के साथ एक सामुदायिक संस्करण और एंटरप्राइज़ संस्करण है।
रिएक्ट नेटिव तक चीजों को हुक करने के लिए उन्हें अपनी साइट पर एक ट्यूटोरियल मिला है। मैंने भी इस पर अधिक समय नहीं बिताया है, लेकिन यह कार्यक्षमता के मामले में दायरे के लिए एक व्यवहार्य विकल्प प्रतीत होता है। मुझे नहीं पता कि आपके ऐप या आपके द्वारा बनाए गए किसी भी एपीआई के बाहर आपके डेटा को प्राप्त करना कितना आसान है।
[संपादित करें: एक पुराना लिंक मिला जो Couchbase और CouchDB के बारे में बात करता है, और CouchDB विचार करने के लिए एक और विकल्प हो सकता है। दोनों ऐतिहासिक रूप से संबंधित हैं, लेकिन वर्तमान में पूरी तरह से अलग उत्पाद हैं। यह तुलना देखें ।]
निष्कर्ष: लगता है कि दायरे के समान क्षमता है। डिवाइस-ओनली या सिंक किया जा सकता है। मुझे इसे आज़माने की ज़रूरत है।
MongoDB
अपडेट 4/2020
Mongo ने Realm का अधिग्रहण किया और MongoDB Stitch (नीचे चर्चा की गई) को Realm (ऊपर चर्चा की गई) के साथ संयोजित करने की योजना बनाई ।
मैं इस सर्वर साइड का उपयोग ऐप के एक टुकड़े के लिए कर रहा हूं जो स्थानीय रूप से AsyncStorage का उपयोग करता है। मुझे पसंद है कि सब कुछ JSON ऑब्जेक्ट्स के रूप में संग्रहीत किया जाता है, जिससे क्लाइंट डिवाइसों को बहुत सीधा प्रसारण होता है। मेरे उपयोग के मामले में, यह टीवी गाइड डेटा और मेरे ग्राहक उपकरणों के अपस्ट्रीम प्रदाता के बीच कैश के रूप में उपयोग किया जाता है।
स्कीमा की तरह डेटा के लिए कोई कठिन संरचना नहीं है, इसलिए प्रत्येक ऑब्जेक्ट को "दस्तावेज़" के रूप में संग्रहीत किया जाता है जो आसानी से खोजा जा सकता है, फ़िल्टर करने योग्य, आदि। इसी तरह की JSON ऑब्जेक्ट्स में अतिरिक्त (लेकिन अलग-अलग) विशेषताएँ या चाइल्ड ऑब्जेक्ट हो सकते हैं, जो एक के लिए अनुमति देता है आप अपनी वस्तुओं / डेटा की संरचना में बहुत लचीलापन रखते हैं।
मैंने सर्वर सिंक्रनाइज़ेशन सुविधाओं के लिए किसी भी क्लाइंट की कोशिश नहीं की है, न ही मैंने इसे एम्बेडेड का उपयोग किया है। MongoDB के लिए प्रतिक्रिया मूल कोड मौजूद है।
निष्कर्ष: स्थानीय केवल NoSQL समाधान, Realm या Firebase जैसा कोई स्पष्ट सिंक विकल्प नहीं।
2/2019 अपडेट करें
MongoDB में एक "उत्पाद" (या सेवा) है जिसे स्टिच कहा जाता है। चूंकि क्लाइंट (वेब ब्राउज़र और फोन के अर्थ में) सीधे MongoDB से बात नहीं करनी चाहिए (जो कि आपके सर्वर पर कोड द्वारा की जाती है), उन्होंने एक सर्वर रहित फ्रंट-एंड बनाया, जिसके साथ आपके ऐप्स इंटरफ़ेस कर सकते हैं, क्या आपको उनका उपयोग करने का चयन करना चाहिए होस्टेड समाधान (एटलस)। उनका प्रलेखन यह प्रकट करता है कि एक संभावित सिंक विकल्प है।
दिसंबर 2018 से यह राइटअप एक नमूना ऐप में रिएक्ट मूल निवासी, सिलाई और MongoDB का उपयोग करके चर्चा करता है, दस्तावेज़ में अन्य नमूने जुड़े हुए हैं ( https://www.mongodb.com/blog/post/building-ios-and-android-apps) -साथ-मोंगोडब-सिलाई-प्रतिक्रिया-देशी-एसडीके )।
ट्विलियो सिंक
तुल्यकालन के लिए एक और NoSQL विकल्प ट्वाइलियो का सिंक है। उनकी साइट से: "सिंक आपको किसी भी बैकएंड इन्फ्रास्ट्रक्चर को संभालने के बिना वास्तविक समय में किसी भी संख्या में उपकरणों के राज्य का प्रबंधन करने देता है।"
मैंने इसे पूर्वोक्त परियोजनाओं में से एक के लिए फायरबेस के विकल्प के रूप में देखा, खासकर दोनों टीमों से बात करने के बाद। मुझे उनके अन्य संचार उपकरण भी पसंद हैं, और उन्हें सरल वेब ऐप से अपडेट करने के लिए उपयोग किया है।
[संपादित करें] मैंने रियलम के साथ कुछ समय बिताया है क्योंकि मैंने मूल रूप से यह लिखा था। मुझे पसंद है कि मुझे Firebase के समान ऐप और सर्वर के बीच डेटा को सिंक करने के लिए API कैसे लिखना है। सर्वरलेस फ़ंक्शंस भी इन दोनों के साथ वास्तव में मददगार लगते हैं, मुझे जो बैकएंड कोड लिखना है, उसे सीमित करना होगा।
मुझे MongoDB डेटा स्टोर का लचीलापन पसंद है, इसलिए यह वेब-आधारित और अन्य कनेक्शन-आवश्यक ऐप्स के सर्वर पक्ष के लिए मेरी पसंद बन रहा है।
मुझे RESTHeart मिला , जो MongoDB के लिए एक बहुत ही सरल, स्केलेबल RESTful API बनाता है। एक रिएक्ट (मूल) घटक का निर्माण करना बहुत कठिन नहीं होना चाहिए, जो JSON ऑब्जेक्ट्स को RESTHeart को पढ़ता और लिखता है, जो बदले में उन्हें / MongoDB से पास करता है।
[संपादित करें] मैंने जानकारी जोड़ी है कि डेटा कैसे संग्रहीत किया जाता है। कभी-कभी यह जानना महत्वपूर्ण है कि यदि आपने डेटा को ट्वीक और परीक्षण करने के लिए प्राप्त किया है, तो विकास और परीक्षण के दौरान आप कितना काम कर सकते हैं।
संपादन 2/2019 मैंने पिछले साल (2018) में एक उच्च-संगामिति परियोजना को डिजाइन करते समय इनमें से कई विकल्पों के साथ प्रयोग किया। उनमें से कुछ ने अपने प्रलेखन में कठिन और नरम संगामिति सीमाओं का उल्लेख किया है (फायरबेस में 10,000 कनेक्शन पर एक कठिन था, मुझे विश्वास है, जबकि ट्विलियो की एक नरम सीमा थी जिसे AltConf में दोनों टीमों के साथ चर्चा के अनुसार टकराया जा सकता था)।
यदि आप दसियों हज़ारों उपयोगकर्ताओं के लिए एक ऐप डिज़ाइन कर रहे हैं, तो तदनुसार डेटा बैकेंड को स्केल करने के लिए तैयार रहें।