मैं वर्तमान में एक ही आवश्यकताओं और मुद्दों के साथ एक मोबाइल / डेस्कटॉप / वितरित ऐप पर काम कर रहा हूं।
सबसे पहले, ये आवश्यकताएं मोबाइल एप्लिकेशन के प्रति अंतर्निहित नहीं हैं, लेकिन किसी भी डिस्कनेक्ट / वितरित क्लाइंट-सर्वर लेनदेन (समानांतर प्रोग्रामिंग, मल्टीथ्रेडिंग, आपको बिंदु मिलता है) के लिए। जैसे, वे निश्चित रूप से, मोबाइल एप्लिकेशन में पता करने के लिए विशिष्ट मुद्दे हैं।
आम तौर पर, यह सब उबलता है कि आपके पास एक संभावित डेटा रिकॉर्ड है जो n ग्राहकों को वितरित किया जाता है, जो इसे उसी समय संपादित कर सकते हैं। आपको क्या चाहिए
- एक उचित संस्करण नियंत्रण / लॉकिंग तंत्र,
- एक उचित अधिकार / पहुंच प्रबंधन,
- एक उचित सिंक्रनाइज़ेशन / कैशिंग रणनीति
(1) के लिए आप कुछ पैटर्न लागू कर सकते हैं: दो बार उपयोग की जाने वाली लॉकिंग रणनीतियाँ हैं: ऑप्टिमिस्टिक ऑफ़लाइन लॉकिंग और निराशावादी लॉकिंग । इनमें से कुछ अलग-अलग संस्करण नियंत्रण "पैटर्न" में लागू होते हैं, जैसे कि मल्टीवर्जन कॉन्सिक्वेंसी कंट्रोल ( एमवीसीसी ), जो प्रत्येक डेटा रिकॉर्ड के लिए एक काउंटर (एक बहुत ही सरल "टाइम स्टैम्प" की तरह) का उपयोग करता है, जिसे जब भी रिकॉर्ड बदला जाता है ।
(२) और (३) बहुत व्यापक मुद्दे हैं, जिन्हें स्वतंत्र रूप से (१) निपटाया जाना चाहिए। मेरे अनुभव से कुछ सलाह:
एक क्लाइंट-सर्वर तकनीक का उपयोग करें जो आपके लिए अधिकांश मुद्दों को दूर करती है। मैं CouchDb जैसी कुछ वेब तकनीक की अत्यधिक अनुशंसा करता हूं , जो (1) ऑप्टिमिस्टिक ऑफ़लाइन लॉकिंग + MVCC, (2) वेब एपीआई के माध्यम से, और (3) Http कैशिंग के माध्यम से बहुत अच्छी तरह से संभालती है।
यदि आप सिद्ध तकनीकों और दृष्टिकोणों पर भरोसा कर सकते हैं तो चीजों को स्वयं आविष्कार न करने का प्रयास करें। मेरा मानना है कि मौजूदा प्रौद्योगिकियों / पैटर्न की तुलना में शोध और खर्च किए गए किसी भी घंटे को अपने स्वयं के सिस्टम को लागू करने की कोशिश करने की तुलना में बेहतर खर्च किया जाता है।
यदि संभव हो तो सजातीय प्रौद्योगिकियों का उपयोग करने का प्रयास करें। "सजातीय" से मेरा अभिप्राय उन प्रौद्योगिकियों से है, जो उन्हीं सिद्धांतों को ध्यान में रखकर बनाई गई हैं, जैसे वेब 2.0 उपयोग परिदृश्य। एक उदाहरण: स्थानीय कैशिंग रणनीति के साथ उचित काउचडब और रीस्ट क्लाइंट (वेब एपीआई) का उपयोग करना मोबाइल एप्लिकेशन के लिए एसक्यूएल का उपयोग करने से बेहतर विकल्प है।
मैं MySQL के उपयोग के खिलाफ दृढ़ता से सलाह देता हूं क्योंकि यह एक ऐसी तकनीक है जो स्पष्ट रूप से ऐसे उपयोग परिदृश्यों के लिए नहीं बनाई गई थी। यह काम करता है, लेकिन आप एक डेटाबेस सिस्टम के साथ बहुत बेहतर हैं जो पहले से ही वेब संचार और संगामिति शैली (जैसे कई NoSQL डेटाबेस) को गले लगाता है।
वैसे, मैंने CouchDb के लिए एक कस्टम स्थानीय क्लाइंट के साथ काम किया है, जो CouchDb API के खिलाफ काम करता है, जो खूबसूरती से काम करता है। मैंने MSQL + (N) हाइबरनेट का उपयोग करने से स्विच किया और पहली जगह में सही विकल्प (पर्याप्त शोध नहीं करने का अर्थ) नहीं बनाने के लिए उच्च कीमत का भुगतान किया।