मेरे 2 पेंस लायक। थोड़ी लालसा लेकिन ...... मुझे अपनी ऊष्मायन परियोजनाओं में एक समान आवश्यकता थी। आपकी तरह, मेरी मुख्य आवश्यकताएं जहां दस्तावेज़ संस्करण के साथ एक दस्तावेज़ डेटाबेस (मेरे मामले में xml)। यह बहु-उपयोगकर्ता प्रणाली के लिए था जिसमें बहुत सारे सहयोग उपयोग के मामले थे। मेरी प्राथमिकता उपलब्ध ओपनसोर्स समाधानों का उपयोग करना था जो अधिकांश प्रमुख आवश्यकताओं का समर्थन करते हैं।
पीछा करने के लिए कटौती करने के लिए, मुझे कोई भी एक उत्पाद नहीं मिला जो दोनों प्रदान करता है, इस तरह से स्केलेबल पर्याप्त था (उपयोगकर्ताओं की संख्या, उपयोग की मात्रा, भंडारण और कंप्यूट संसाधन)। मैं सभी आशाजनक क्षमता के लिए गिट के प्रति पक्षपाती था, और। (संभावित) समाधान कोई भी इसे बाहर निकाल सकता है। जैसा कि मैंने git विकल्प के साथ खिलवाड़ किया है, एक एकल उपयोगकर्ता के नजरिए से एक बहु (मिली) उपयोगकर्ता के परिप्रेक्ष्य में जाना एक स्पष्ट चुनौती बन गया है। दुर्भाग्य से, मुझे आपकी तरह पर्याप्त प्रदर्शन विश्लेषण नहीं मिला। (.. आलसी / जल्दी छोड़ दिया .... संस्करण 2 के लिए, मंत्र) आप को शक्ति!। वैसे भी, मेरे पक्षपाती विचार के बाद से अगले (अभी भी पक्षपाती) विकल्प के लिए morphed है: उपकरण का एक जाल-अप जो उनके अलग-अलग क्षेत्रों, डेटाबेस और संस्करण नियंत्रण में सबसे अच्छा है।
हालांकि अभी भी प्रगति में काम कर रहे हैं ... (और थोड़ा उपेक्षित) रूपांकित संस्करण बस यही है।
- फ्रंटएंड पर: (userfacing) 1 स्तर के भंडारण के लिए एक डेटाबेस का उपयोग करें (उपयोगकर्ता अनुप्रयोगों के साथ इंटरफेस)
- बैकएंड पर, डेटाबेस में डेटा ऑब्जेक्ट्स की वर्जनिंग करने के लिए एक वर्जन कंट्रोल सिस्टम (VCS) (जैसे git) का उपयोग करें
संक्षेप में, यह कुछ एकीकरण गोंद के साथ डेटाबेस में एक संस्करण नियंत्रण प्लगइन जोड़ने की राशि होगी, जिसे आपको विकसित करना पड़ सकता है, लेकिन बहुत आसान हो सकता है।
यह कैसे (माना जाता है) काम है कि प्राथमिक बहु-उपयोगकर्ता इंटरफ़ेस डेटा एक्सचेंज डेटाबेस के माध्यम से हैं। DBMS सभी मज़ेदार और जटिल मुद्दों जैसे बहु-उपयोगकर्ता, संगामिति, परमाणु संचालन इत्यादि को संभालेगा। बैकएंड पर VCS डेटा ऑब्जेक्ट्स (कोई सुगमता, या बहु-उपयोगकर्ता समस्याओं) के एक सेट पर संस्करण नियंत्रण का प्रदर्शन करेगा। डेटाबेस पर प्रत्येक प्रभावी लेनदेन के लिए, संस्करण नियंत्रण केवल उन डेटा रिकॉर्डों पर किया जाता है जो प्रभावी रूप से बदल गए होते हैं।
इंटरफेसिंग गोंद के रूप में, यह डेटाबेस और वीसीएस के बीच एक साधारण अंतर-कार्य के रूप में होगा। डिजाइन के संदर्भ में, जैसा कि सरल दृष्टिकोण एक घटना संचालित इंटरफ़ेस होगा, डेटाबेस नियंत्रण से डेटा अपडेट के साथ संस्करण नियंत्रण प्रक्रियाओं को ट्रिगर करता है (संकेत: मैसिकल, ट्रिगर्स का उपयोग और sys_exec () blah blah ...)। कार्यान्वयन जटिलता के संदर्भ में, यह सरल और प्रभावी (जैसे स्क्रिप्टिंग) से जटिल और अद्भुत (कुछ प्रोग्राम कनेक्टर इंटरफ़ेस) तक होगा। सभी इस बात पर निर्भर करते हैं कि आप इसके साथ कितना पागल होना चाहते हैं, और आप कितना पसीना बहाने के लिए तैयार हैं। मुझे लगता है कि साधारण स्क्रिप्टिंग को जादू करना चाहिए। और अंतिम परिणाम तक पहुंचने के लिए, विभिन्न डेटा संस्करण, एक सरल विकल्प वीसीएस में संस्करण टैग / आईडी / हैश द्वारा संदर्भित डेटा के साथ डेटाबेस (डेटाबेस संरचना का एक क्लोन) को पॉप्युलेट करने के लिए है। फिर से यह बिट एक इंटरफ़ेस का सरल क्वेरी / ट्रांसलेशन / मैप जॉब होगा।
अभी भी कुछ चुनौतियों और अज्ञात से निपटा जाना है, लेकिन मुझे लगता है कि प्रभाव, और इनमें से अधिकांश की प्रासंगिकता काफी हद तक आपकी एप्लिकेशन आवश्यकताओं और उपयोग के मामलों पर निर्भर करेगी। कुछ सिर्फ गैर मुद्दे होने का अंत हो सकता है। कुछ मुद्दों में उच्च आवृत्ति डेटा अपडेट गतिविधि के साथ 2 कुंजी मॉड्यूल, डेटाबेस और वीसीएस के बीच प्रदर्शन मिलान शामिल हैं, डेटा के रूप में समय के साथ-साथ उपयोगकर्ताओं और उपयोगकर्ताओं के लिए संसाधनों का संग्रहण (भंडारण और प्रसंस्करण शक्ति)। विकसित: स्थिर, घातीय या अंततः पठार
ऊपर कॉकटेल की, यहाँ मैं वर्तमान में शराब पी रहा हूँ
- वीसीएस के लिए गिट का उपयोग करना (केवल 2 संस्करणों के बीच केवल बदलाव या डेल्टा के उपयोग के कारण अच्छे पुराने सीवीएस के रूप में माना जाता है)
- mysql का उपयोग करना (मेरे डेटा की अत्यधिक संरचित प्रकृति के कारण, सख्त xml स्कीमा के साथ xml)
- MongoDB के साथ आस-पास रहना (NoSQl डेटाबेस की कोशिश करना, जो कि मूल रूप से git में प्रयुक्त मूल डेटाबेस संरचना से मेल खाता है)
कुछ मजेदार तथ्य - गिट वास्तव में भंडारण को अनुकूलित करने के लिए स्पष्ट चीजें करते हैं, जैसे कि संपीड़न, और वस्तुओं के संशोधन के बीच केवल डेल्टास का भंडारण - हां, डेटा ऑब्जेक्ट्स के संशोधन के बीच केवल परिवर्तनकर्ता या डेल्टास को संग्रहीत करता है, जहां यह लागू है (यह जानता है) कब और कैसे) । संदर्भ: packfiles, Git internals की हिम्मत में गहरी
- git के ऑब्जेक्ट स्टोरेज (कंटेंट-एड्रेसेबल फाइलसिस्टम) की समीक्षा, noSQL डेटाबेस जैसे mSQLoDB के साथ समानताएं (कॉन्सेप्ट के नजरिए से) दिखाती है। फिर, पसीने की पूंजी की कीमत पर, यह 2 को एकीकृत करने के लिए अधिक दिलचस्प संभावनाएं प्रदान कर सकता है, और प्रदर्शन tweaking
यदि आपको यह मिल गया है, तो मुझे बताएं कि क्या उपरोक्त आपके मामले पर लागू हो सकता है, और यह मानते हुए कि यह आपके अंतिम व्यापक प्रदर्शन विश्लेषण के कुछ पहलुओं को कैसे पूरा करेगा?