5

स्थिति: मेरे पास एक डेटाबेस और एक वेब ऐप है जो वैज्ञानिक डेटा की तालिका प्रदर्शित करने और अपडेट करने के लिए इंटरैक्ट करता है। मेरे काम के लिए एक मोबाइल अनुप्रयोग है किऑफ़लाइन/ऑनलाइन डेटाबेस प्रमाणीकरण/jQuery मोबाइल से सिंक्रनाइज़ेशन

  1. प्रमाणित करने के लिए उपयोगकर्ताओं की अनुमति देगा का निर्माण और
  2. डाउनलोड पहचान डाटा ट्रैकिंग उद्देश्यों के के लिए ऑफ़लाइन खुद की पहचान (पूर्वनिर्धारित लेकिन गतिशील उपयोगकर्ता के खातों और अनुमतियाँ कैश में संग्रहित का उपयोग) करने के लिए है क्षेत्र में काम फील्ड में
  3. मेक और स्टोर टिप्पणियों (इंटरनेट का उपयोग के बिना)
  4. बाद में किसी समय
में एक ऑनलाइन डाटाबेस में टिप्पणियों सिंक्रनाइज़ करें (इंटरनेट का उपयोग के साथ)

प्रश्न: लगातार इंटरनेट एक्सेस से स्वतंत्र ऐसे एप्लिकेशन को प्रशासित करने के लिए आवश्यक डेटा को प्रमाणीकरण/डाउनलोड/भंडारण/अपलोड करने के बारे में जाने का सबसे अच्छा तरीका क्या है? यदि दो लोग एक ही पढ़ने को समायोजित करते हैं, और सिंक के बीच एक अपडेट होता है, तो मैं कैसे ट्रैक करूं कि कौन सी टेबल और मान बदल दिए गए हैं, और परिवर्तनों को खोने से रोकें?

सोच की वर्तमान धारा: टक्कर नियंत्रण पर मेरे वर्तमान जांच रणनीति एक "समन्वयन" तालिका JSON ऑब्जेक्ट sessionStorage में संग्रहीत हर ऑनलाइन डेटाबेस लेनदेन का प्रतिनिधित्व संग्रहीत करता है को बनाए रखने और एप्लिकेशन लगातार डेटा अपलोड करने से पहले अपने सिंक की पुष्टि करने के लिए , और विशिष्ट प्राथमिक कुंजी के अपडेट पर संभावित टकराव के लिए इस ऑब्जेक्ट को जांचना। जब वे एक संपादन चरण में होते हैं तो मैं tuples को लॉक करने में सक्षम होना चाहता हूं, लेकिन यह असंगत इंटरनेट पहुंच के साथ असंभव प्रतीत होता है।

क्षमा करें अगर यह एक newb सवाल का एक सा है, मैं पूरी मोबाइल एप्लिकेशन विकास बात करने के लिए नए हूँ ...

tl; डॉ मैं मोबाइल एप्लिकेशन से डेटाबेस के लिए अतुल्यकालिक परिवर्तन को कैसे रोकूं जो एक ही डेटाबेस में किसी अन्य व्यक्ति के परिवर्तन के साथ ओवरराइटिंग/टकराव से चालू और ऑफलाइन हो जाता है? और मैं नेटवर्क कनेक्शन w/o उपयोगकर्ताओं को प्रमाणीकृत कैसे करूं?

+0

Concurrency कई ऐप्स और डेटाबेस के साथ एक समस्या है। पोस्टिंग और मोबाइल के साथ प्रौद्योगिकी में बस एक लंबा अंतर है, लेकिन यह अलग नहीं है। – JeffO

+1

@ जेफो आप वास्तव में मेरे सवालों का जवाब नहीं दे रहे हैं .. समेकन और डेटा टकराव एक समस्या है जिसे मैंने पहचाना है, यह सच है, लेकिन इसका क्या? – XaxD

उत्तर

2

तुल्यकालन के लिए आप jIO पर एक नज़र हो सकता था के रूप में - एक खुला -सोर्स लाइब्रेरी पर हम काम कर रहे हैं जो JSON दस्तावेज़ों को विभिन्न प्रकार के स्टोरेज में सिंक्रनाइज़ कर सकता है और इसमें एक सुपर-सरल एपीआई है।

कनेक्टरों का एक गुच्छा उपलब्ध है और (वेबडाव, एस 3, xwiki, आदि) पर काम किया जा रहा है और आप जेआईओ को हुक अप करने के लिए अपना खुद का कनेक्टर भी लिख सकते हैं जिससे आप अपने JSON डेटा की आपूर्ति कर रहे हैं।

तो ग्राहक पर आप उदाहरण के लिए ग्राहक स्थानीय होस्ट का उपयोग कर एक दोहराने-संशोधन भंडारण और अपने दूरस्थ भंडारण भंडार के रूप में स्थापित कर सकते हैं:

var jio_instance = jIO.newJio({ 
    "type": "replicaterevision", 
    "storage_list": [{ 
    "type": "revision", 
    "sub_storage": {<storage spec for your localhost storage>} 
    }, { 
    "type": "revision", 
    "sub_storage": {<storage spec for your remote storage>} 
    }] 
}); 

storage_list के सभी भंडार स्वचालित रूप से संस्करणीकृत और सिंक्रनाइज़ किया जाएगा। इसलिए यदि कोई उपयोगकर्ता ऑफ़लाइन है, तो दस्तावेज़ पुनर्प्राप्त करता है, संपादित करता है और इसे सहेजता है (केवल स्थानीय स्टोरेज के लिए, जैसे उपयोगकर्ता ऑफ़लाइन है), अगली बार उपयोगकर्ता ऑनलाइन होने पर फ़ाइल तक पहुंचने का प्रयास करता है, क्योंकि वर्तमान संस्करण remote-storage और localstorage भिन्न हैं।

फिर ऑनलाइन/ऑफलाइन होने के दौरान कई उपयोगकर्ता संपादन दस्तावेज़ों से उत्पन्न होने वाले किसी भी संघर्ष को हल करने के लिए केवल एक दिनचर्या लिखना एक मामला है = कौन सा संस्करण रखना/विलय/आदि रखना है।

दस्तावेजों तक पहुंच काफी सरल है। JSON दस्तावेज़ मेटा डेटा और attachements है और आप अपनी JSON दस्तावेज़ को संशोधित करने के लिए निम्न आदेश का उपयोग कर सकते हैं:

POST > generate a new document 
    PUT > update existing document 
    GET > retrieve a document 
    REMOVE > delete a document 
    ALLDOCS > retrieve all documents 
    PUTATTACHEMENT > add an attachment to a document 
    GETATTACHEMENT > retrieve an attachment from a document 
    REMOVEATTACHEMENT > delete an attachement from a document 

प्रतिदेय इस तरह:

jio_instance.get({"_id":"your_doc_id"}, function (err, response) { 
    // do something 
    }); 

जियो भी एक complex-queries मॉड्यूल है, जो डेटाबेस को चलाने के लिए अनुमति देता है अपने भंडारों पर पूछताछ की तरह। तो आप इस तरह कुछ कर सकते हैं:

options = { 
query: '(author:"% Doe") AND (format:"pdf")', 
limit: [0, 100], 
sort_on: [['last_modified', 'descending'], ['creation_date', 'descending']], 
select_list: ['title'], 
wildcard_character: '%' 
}; 

// run query 
jio_instance.allDocs(options, function (error, response) { 
    // do sth 
}); 

यदि आपके कोई प्रश्न हैं तो मुझे बताएं।

2

क्या आपने AJAX कॉल के संदर्भ में "दौड़ की स्थिति" [1] के बारे में सुना है? एक समाधान [2] है, आप अपने एजेक्स को समवर्ती के बजाय अपने सर्वर अनुक्रमिक में कैसे कॉल कर सकते हैं और इस प्रकार वे एक के बाद अनुक्रम में चलाए जा सकते हैं। यह एसिंक्रोनस कनेक्शन के साथ काम करता है, इसलिए किसी भी अन्य सिंक चीज की आवश्यकता नहीं है।

इस उद्देश्य के लिए jQuery AJAXQueue [3] का उपयोग करना है।

मेरे सूत्रों:

[1] http://en.wikipedia.org/wiki/Race_condition

[2] How to make all AJAX calls sequential?

[3] http://plugins.jquery.com/ajaxqueue/

2
उपयोगकर्ता प्रमाणीकरण के लिए

जबकि नेटवर्क के मैं मार्ग का अनुसरण सुझाव देगा कनेक्ट नहीं:

बिंदु # 2 में आप इंटरनेट का उपयोग के माध्यम से पहचान डेटा डाउनलोड कर रहे हैं। तो जाहिर है आपको स्थानीय स्टोरेज के अंदर एन्क्रिप्टेड प्रारूप में उपयोगकर्ता नाम और पासवर्ड जोड़ी को सहेजना होगा। यह केवल एक चीज है जो दूरस्थ उपयोगकर्ता यानी ऑफ़लाइन मोड में एप्लिकेशन तक पहुंचते समय उसी डिवाइस पर उसी उपयोगकर्ता को प्रमाणीकृत करते समय आपकी सहायता करेगी। अंततः हाथ से आयोजित डिवाइस प्रति उपयोगकर्ता हैं और आपका आवेदन केवल उस उपयोगकर्ता का इतिहास रखेगा; जो मुझे इस तरह के परिदृश्य में बिल्कुल ठीक लगता है।

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

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