11

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

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

enter image description here

परिदृश्य ऊपर वर्तमान कार्यान्वयन जो डेल्टा (छोटे परिवर्तन) और नहीं बल्कि स्नैपशॉट संशोधन पर निर्भर करता है पर निर्भर नहीं करता के कारण होती है।

कुछ सवाल

1) मेरे शोध से पता चलता है कि मैं "सिंक" तंत्र डेल्टा में व्यक्त किया जा करने के लिए (छोटे परिवर्तन है कि स्वतंत्र रूप से लागू किया जा सकता) उन्नयन किया जाना चाहिए। क्या यह एक अच्छा दृष्टिकोण है?

2) क्या प्रत्येक डेल्टा को स्वतंत्र रूप से लागू किया जाना चाहिए?

2) मेरे शोध के अनुसार, संशोधन डेल्टा के पास संख्यात्मक मूल्य है और टाइमस्टैम्प नहीं है। इसके लिए मूल्य क्या होना चाहिए? मैं कैसे सुनिश्चित करूंगा कि सर्वर और ग्राहक दोनों सहमत हैं कि संशोधन संख्या क्या होनी चाहिए?

ढेर जानकारी

  • दृश्यपटल (ऑफलाइन मोड)
  • IndexedDB दस्तावेजों स्थानीय रूप से बचाने के लिए पर कोणीय
  • Postgres बैकएंड में JSONB साथ डीबी
+1

संबंधित: http://stackoverflow.com/questions/28797992/best-practices-in-syncing-data –

+0

Git पहले से ही यह कर सकता है किसी भी तरह इसका इस्तेमाल एक उपयोगकर्ता दस्तावेज़ अंतर करने के लिए दिखाने के लिए। –

+1

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

उत्तर

5

क्या अपने को वर्णित करते हैं एक संस्करण नियंत्रण समस्या this question में। विकल्प को हल करने के तरीके में आपका विकल्प है। यहाँ इस समस्या के साथ अन्य उत्पादों के कुछ उदाहरण हैं:

  • गूगल डॉक्स: एक, बनाता संपादित ऑफ़लाइन, बी ऑनलाइन संपादित करता है, एक चला जाता है ऑनलाइन सिंक, गूगल डॉक्स को जोड़ती है ए और बी के संपादन
  • एप्पल नोट: गूगल डॉक्स के रूप में ही
  • Git/सबवर्सन: एक त्रुटि फेंक, संघर्ष
  • Wunderlist को हल करने के लिए कहें: अंतिम संपादन अधिलेखित कर देता है पिछले

अपने मामले के लिए, यह सबसे सरल समाधान Wunderlist के दृष्टिकोण का उपयोग करने के लिए है, लेकिन ऐसा लगता है कि उपयोगिता मुद्दा हो सकता है। आपके उपयोगकर्ता क्या होने की उम्मीद करते हैं?

आपके प्रश्नों का उत्तर देना सीधे:

  1. कस्टम समन्वयन कार्यान्वयन के लिए आवश्यक है यदि आप अधिलेखित नहीं करना चाहती।
  2. यह एक उपयोगिता निर्णय है, उपयोगकर्ता क्या अपेक्षा करता है?
  3. सच है, संशोधन संख्यात्मक हैं (उदाहरण के लिए आर 1, आर 2)। सर्वर अनुबंध प्राप्त करने के लिए, अंतिम सिंक अनुरोध के वापसी मूल्य को बदलें। आप पूरे मॉडल को प्रत्येक बार क्लाइंट में वापस कर सकते हैं (या सामान्य सिंक होने पर केवल 200 ओके)। यदि ग्राहक को एक मॉडल वापस कर दिया जाता है, तो क्लाइंट को नवीनतम मॉडल के साथ अपडेट करें।

किसी भी मामले में, सर्वर हमेशा सत्य का स्रोत होना चाहिए। This post सर्वर/मोबाइल रेफेरेंन्शिअल सत्यनिष्ठा पर कुछ अच्छी सलाह प्रदान करता है:

आवेषण आप एक बनाया गया टाइमस्टैम्प ... की जरूरत है आप अपनी पंक्तियों पर एक LASTUPDATE टाइमस्टैम्प ट्रैक करने की जरूरत अद्यतन ट्रैक करने के लिए ट्रैक करने के लिए ... ट्रैक करने के लिए आप की जरूरत को हटाता है एक कबूतर की मेज।

ध्यान दें कि जब आप एक सिंक करते हैं, तो आपको सर्वर और मोबाइल डिवाइस के बीच समय ऑफसेट की जांच करने की आवश्यकता होती है, और आपको संघर्षों को हल करने के लिए एक विधि की आवश्यकता होती है। सम्मिलन कोई बड़ा सौदा नहीं है (उन्हें संघर्ष नहीं करना चाहिए), लेकिन अपडेट संघर्ष कर सकते हैं, और एक डिलीट अपडेट के साथ संघर्ष कर सकता है।

+0

मैंने अपने मूल उत्तर को और अधिक विशिष्ट विवरण शामिल करने के लिए संशोधित किया। रीढ़ की हड्डी यहां मुख्य रूप से सहायता नहीं होगी क्योंकि इसकी पर्याप्त राय नहीं है और इसमें ऑफ़लाइन-ऑनलाइन सिंक मॉडल नहीं है जो संशोधन को संभालता है। –

+1

@dipole_moment ठीक है, यह संस्करण नियंत्रण में एक क्लासिक समस्या है। मैं अपडेट करूंगा। –

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