मैं कई उपकरणों जैसे कि iPad या Mac के बीच iPhone एप्लिकेशन में संग्रहीत कोर डेटा को सिंक करने के लिए एक विधि पर काम कर रहा हूं। IOS पर Core Data के साथ उपयोग के लिए कई (यदि कोई हो तो) सिंक फ्रेमवर्क नहीं हैं। हालाँकि, मैं निम्नलिखित अवधारणा के बारे में सोच रहा हूँ:
- एक परिवर्तन स्थानीय कोर डेटा स्टोर में किया जाता है, और परिवर्तन सहेज लिया जाता है। (ए) यदि डिवाइस ऑनलाइन है, तो यह सर्वर को परिवर्तन भेजने की कोशिश करता है, जिसमें डिवाइस का डिवाइस आईडी भी शामिल है जो कि बदलाव भेजा गया है। (b) यदि परिवर्तन सर्वर तक नहीं पहुंचता है, या यदि डिवाइस ऑनलाइन नहीं है, तो ऐप ऑनलाइन आने पर इसे बदलने के लिए एक कतार में परिवर्तन सेट कर देगा।
- क्लाउड में बैठा सर्वर विशिष्ट परिवर्तन सेट को अपने मास्टर डेटाबेस के साथ मिला देता है।
- एक परिवर्तन सेट (या परिवर्तन सेट की एक कतार) को क्लाउड सर्वर पर मर्ज किया जाता है, सर्वर उन सभी परिवर्तन सेटों को किसी न किसी तरह के पोलिंग सिस्टम का उपयोग करके सर्वर के साथ पंजीकृत अन्य उपकरणों पर धकेलता है। (मैंने Apple की पुश सेवाओं का उपयोग करने के लिए सोचा था, लेकिन जाहिरा तौर पर टिप्पणियों के अनुसार यह एक व्यावहारिक प्रणाली नहीं है।)
क्या कुछ कल्पना है जिसके बारे में मुझे सोचने की ज़रूरत है? मैंने ObjectiveResource , Core Resource और RestfulCoreData जैसे REST फ्रेमवर्क को देखा है । बेशक, ये सभी रूबी ऑन रेल्स के साथ काम कर रहे हैं, जिसे मैं बांध नहीं रहा हूं, लेकिन यह एक जगह है। मेरे समाधान के लिए मेरे पास मुख्य आवश्यकताएं हैं:
- मुख्य थ्रेड को रोके बिना पृष्ठभूमि में कोई भी परिवर्तन भेजा जाना चाहिए।
- इसे यथासंभव कम बैंडविड्थ का उपयोग करना चाहिए।
मैंने कई चुनौतियों के बारे में सोचा है:
- यह सुनिश्चित करना कि अलग-अलग डिवाइसों पर अलग-अलग डेटा स्टोर के लिए ऑब्जेक्ट आईडी सर्वर पर संलग्न हैं। यह कहना है, मेरे पास ऑब्जेक्ट आईडी और डिवाइस आईडी की एक तालिका होगी, जो डेटाबेस में संग्रहीत ऑब्जेक्ट के संदर्भ में बंधी है। मेरे पास एक रिकॉर्ड (डेटाबेसआईड [इस तालिका के लिए अद्वितीय], ऑब्जेक्टआईड [पूरे डेटाबेस में आइटम के लिए अद्वितीय], डेटाफ़ील्ड 1, डेटाफ़ील्ड 2), ऑब्जेक्टआईआईडी फ़ील्ड एक अन्य तालिका, AllObjects: (ObjectId, DeviceId, DeviceObjectId) का संदर्भ देगा। फिर, जब डिवाइस एक परिवर्तन सेट को धक्का देता है, तो यह डिवाइस आईडी और ऑब्जेक्ट के साथ स्थानीय डेटा स्टोर में कोर डेटा ऑब्जेक्ट से गुजर जाएगा। तब मेरा क्लाउड सर्वर ऑलऑब्जेक्ट टेबल में ऑब्जेक्टआईड और डिवाइस आईडी के खिलाफ जांच करेगा, और प्रारंभिक तालिका में बदलने के लिए रिकॉर्ड ढूंढेगा।
- सभी परिवर्तनों को टाइमस्टैम्प किया जाना चाहिए, ताकि उन्हें मर्ज किया जा सके।
- डिवाइस को बहुत अधिक बैटरी का उपयोग किए बिना, सर्वर को प्रदूषित करना होगा।
- स्थानीय उपकरणों को सर्वर से परिवर्तन प्राप्त होने पर / मेमोरी में रखी गई किसी भी चीज़ को अपडेट करने की आवश्यकता होगी।
क्या यहां कुछ और है जो मुझे याद आ रहा है? इसे संभव बनाने के लिए मुझे किस प्रकार की रूपरेखाएँ देखनी चाहिए?