2012-02-05 6 views
12

मेरे पास एक आईफोन (आईओएस) ऐप है जो प्रत्येक डिवाइस पर स्थानीय SQLite डेटाबेस में डेटा रखता है। ऐप का उपयोग वर्चुअल बैंक खाते को बच्चों के लिए उनके भत्ते, खर्च, बचत इत्यादि को ट्रैक करने के लिए किया जाता है (किड्सबैंक और किड्सबैंक फ्री)। मुझे माता-पिता और संभवतया उनके बच्चों के आईओएस उपकरणों के बीच सिंक क्षमता प्रदान करने के लिए माता-पिता से बहुत सारे अनुरोध मिल रहे हैं।स्थानीय स्क्लाइट का उपयोग करके आईफोन (आईओएस) ऐप और एकाधिक उपकरणों के बीच सिंक करने की इच्छा

मैंने कई विकल्पों पर विचार किया है, लेकिन सभी कठिन और गैर-तुच्छ हैं क्योंकि मूल रूप से डेटाबेस प्रतिकृति या एक नई वास्तुकला की आवश्यकता होती है। किसी भी डिवाइस पर किसी भी लेनदेन को आदर्श रूप से परिवार के सभी उपकरणों (सिंक) के रूप में प्रकट होना चाहिए (सिंक)।

आदर्श रूप में, मैं चाहूँगा सिंक बंद

विकल्प शामिल हैं (1) iCloud का प्रयोग (2) उपकरणों (वाईफाई) (3) का प्रयोग के बीच एक सीधा नेटवर्क कनेक्शन का उपयोग करें स्वत: & हाथ होने की एक सर्वर साइड डेटाबेस और वेब सेवा (JSON/शोकहारा)

(1) iCloud प्रो: iCloud वितरित फाइल सिंक CON प्रदान करता है: iOS 5 में आवश्यक है, SQLite डेटाबेस फ़ाइलों iCloud, क्लासिक डेटाबेस प्रतिकृति के माध्यम से सिंक्रनाइज़ नहीं किया जा सकता है (और गैर-तुच्छ)

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

(2) एक प्रत्यक्ष वाईफाई कनेक्शन दो उपकरणों को मैन्युअल रूप से सिच करने की अनुमति देगा। प्रो: सिंक प्रक्रिया को प्रबंधित करने के लिए जटिल नहीं CON: उपयोगकर्ताओं को वाईफाई

(3) पूरे डेटाबेस को ले जाएं या किसी सर्वर पर लेनदेन प्रबंधित करने के लिए दोनों को अपने ऐप्स से सिंक करने का चयन करना चाहिए। प्रो: सिंक अब आवश्यक नहीं है CON: वेब-संचालित ऐप के लिए विशिष्ट समस्याएं। दूरस्थ वेब सेवा का उपयोग करने के लिए डेटाबेस सेवा परत (वर्तमान में SQL में) को फिर से लिखना होगा। एक सर्वर चलाने की लागत (मैं एडब्ल्यूएस का उपयोग करूंगा)।

क्या कोई भी एकाधिक उपकरणों के बीच SQLite को समन्वयित करने में कुछ अनुभव प्रदान कर सकता है? मैं लेनदेन लॉग के चारों ओर धक्का देने के लिए iCloud का उपयोग करने की दिशा में झुका रहा हूँ। मैं लागत और जटिलता को कम करने की कोशिश कर रहा हूं।

+0

महान प्रश्न ... +1 –

+0

क्या iCloud सभी उपकरणों को एक ही ऐप्पल आईडी पर होने की आवश्यकता होगी? यह मेरे परिवार में काम नहीं करेगा। –

उत्तर

3

iCloud पर जाने शायद यह सबसे अच्छा समाधान है, क्योंकि यह साबित होता है और ऐप्पल द्वारा बनाया जाता है। आपको आईओएस 5 आवश्यकता के बारे में ज्यादा चिंता करने की आवश्यकता नहीं है, क्योंकि 90% से अधिक आंकड़ों के मुताबिक इसका इस्तेमाल होता है। आईओएस 5 अपग्रेड करने के लिए स्वतंत्र है। फिर आप अपने पुराने संस्करण को लाइट के रूप में नामित कर सकते हैं, और सिंक्रनाइज़ किए बिना जारी रख सकते हैं।

सिंकिंग शायद आपके द्वारा की जाने वाली सबसे कठिन चीजों में से एक है।

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

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

सभी डेटा जेएसओएन का उपयोग करके भेजा जाता है और इस तरह प्राप्त होता है। यह आसानी से एक छोटे अमेज़ॅन ईसी 2 सर्वर पर चल रहे हजारों उपयोगकर्ताओं को आसानी से संभाल सकता है।

यह बहुत अधिक है कि iCloud कैसे काम करता है, लेकिन मैंने iCloud से पहले यह समाधान किया। अब मैं iCloud पर जा रहा हूं, लेकिन शायद सर्वर को 1 साल या उससे भी अधिक समय तक चलने की आवश्यकता है, उपयोग पर निर्भर करता है।

उम्मीद है कि यह आपकी मदद करता है।

+0

एक हल्के हेरोोकू डिनो इंस्टेंस के साथ "छोटे ईसी 2 सर्वर" को प्रतिस्थापित करने के लिए संभव हो सकता है, जो मुफ़्त होगा। वास्तविक भंडारण आवश्यकता पर निर्भर करता है। – Romain

+0

बेशक, कहीं भी आप एक साधारण वेब सेवा डाल सकते हैं। आपको केवल सेवा और डेटाबेस –

+0

चलाने की आवश्यकता है। मैं ज्यादातर इसे पाठकों को एक नोट के रूप में लक्षित करता हूं - यदि वास्तविक भंडारण की आवश्यकता ~ 0 है, तो हेरोकू सस्ता हो जाएगा (मुफ्त में)। – Romain

2

ऐप पर काम करने के लिए समय निकालने के साथ-साथ समय बीतने और कोर डेटा iCloud प्रतिकृति परिपक्वता के साथ, मैंने अपना ऐप कोर डेटा (NSSQLiteStoreType) में परिवर्तित कर दिया है और लगातार StoreDidImportUbiquitousContentChanges जैसे नोटिफिकेशन की निगरानी की है। हल्के माइग्रेशन का भी उपयोग करना। अच्छी तरह से काम कर रहा है।

+0

हाय बिल, आपने SQLite फ़ाइल को सिंक करने के लिए केवल iCloud का उपयोग क्यों नहीं किया? क्या कोई बाधा थी? साथ ही, आपके ऐप को कोर डेटा में बदलने में कितना समय लगेगा? – pAkY88

+0

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

+0

जानकारी के लिए धन्यवाद! "डेटाबेस समवर्ती मुद्दों" से आपका मतलब यह है कि डेटाबेस पर एक ही समय में संशोधन हो सकते हैं? यदि ऐसा है, तो iCloud का प्रयोग उसी उपयोगकर्ता से संबंधित कई डिवाइसों में फ़ाइल को सिंक करने के लिए किया जाता है, मुझे नहीं लगता कि यह वास्तव में एक मुद्दा है। – pAkY88

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