अपाचे काउचडीबी

अपाचे काउचडीबी एक ओपन-सोर्स डॉक्यूमेंट-उन्मुख नोएसक्यूएल डेटाबेस है, जिसे एर्लैंग में कार्यान्वित किया गया है।

काउचडीबी अपने डेटा को स्टोर करने, ट्रांसफर करने और प्रोसेस करने के लिए कई फॉर्मेट और प्रोटोकॉल का उपयोग करता है। यह डेटा संग्रहीत करने के लिए जेसन का उपयोग करता है, मैपरेड्युस का उपयोग करके अपनी क्वेरी भाषा के रूप में जावास्क्रिप्ट का उपयोग करता है, और एपीआई के लिए एचटीटीपी का उपयोग करता है।

काउचडीबी पहली बार 2005 में जारी किया गया था और बाद में 2008 में अपाचे सॉफ्टवेयर फाउंडेशन प्रोजेक्ट बन गया था।

रिलेशनल डेटाबेस के विपरीत, काउचडीबी डेटाबेस तालिकाओं में डेटा और संबंधों को संग्रहीत नहीं करता है। इसके स्थान पर, प्रत्येक डेटाबेस स्वतंत्र डाक्यूमेंट्स का एक संग्रह है। प्रत्येक डाक्यूमेंट अपना स्वयं का डेटा और स्व-निहित स्कीमा बनाए रखता है। एक एप्लिकेशन कई डेटाबेस तक पहुंच सकता है, जैसे एक उपयोगकर्ता के मोबाइल फोन पर संग्रहीत और दूसरा सर्वर पर। डाक्यूमेंट मेटाडेटा में संशोधन की जानकारी होती है, जिससे डेटाबेस के डिस्कनेक्ट होने के दौरान होने वाले किसी भी अंतर को मर्ज करना संभव हो जाता है।

काउचडीबी मल्टी वर्जन कॉन्करेंसी कंट्रोल (एमवीसीसी) का एक रूप प्रयुक्त करता है, इसलिए यह लिखने के दौरान डेटाबेस फ़ाइल को लॉक नहीं करता है। विवादों को हल करने के लिए एप्लिकेशन पर छोड़ दिया जाता है। किसी विवाद को सुलझाने में आम तौर पर पहले डेटा को किसी एक डाक्यूमेंट में मर्ज करना और फिर पुराने डाक्यूमेंट को हटाना शामिल होता है।

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

इतिहास
काउच अविश्वसनीय कमोडिटी हार्डवेयर के क्लस्टर का संक्षिप्त रूप है। काउचडीबी परियोजना अप्रैल 2005 में आईबीएम के पूर्व लोटस नोट्स डेवलपर डेमियन काट्ज़ द्वारा बनाई गई थी। उन्होंने लगभग दो वर्षों तक इस परियोजना को स्वयं वित्त पोषित किया और इसे जीएनयू जनरल पब्लिक लाइसेंस के तहत एक ओपन-सोर्स प्रोजेक्ट के रूप में जारी किया था।

फरवरी 2008 में, यह अपाचे इनक्यूबेटर प्रोजेक्ट बन गया और इसके बजाय अपाचे लाइसेंस के अंतर्गत प्रस्तुत किया गया। कुछ महीनों के बाद, यह एक शीर्ष-स्तरीय परियोजना में शामिल हो गया। इसके परिणामस्वरूप जुलाई 2010 में पहला स्थिर संस्करण जारी किया गया था।

2012 की शुरुआत में, काट्ज़ ने काउचबेस सर्वर पर ध्यान केंद्रित करने के लिए प्रोजेक्ट छोड़ दिया था।

काट्ज़ के जाने के बाद से, अपाचे काउचडीबी परियोजना जारी रही, अप्रैल 2012 में 1.2 और अप्रैल 2013 में 1.3 जारी किया गया। जुलाई 2013 में, काउचडीबी समुदाय ने बिगकाउच, क्लाउडेंट के काउचडीबी के क्लस्टर्ड संस्करण, के लिए कोडबेस को अपाचे प्रोजेक्ट में मर्ज कर दिया गया। बिगकाउच क्लस्टरिंग ढांचा अपाचे काउचडीबी की वर्तमान रिलीज में शामिल है।

संस्करण 2.0.0 पर नेटिव क्लस्टरिंग समर्थित है। और नया मैंगो क्वेरी सर्वर जावास्क्रिप्ट  या मैपरेड्युस के बिना CouchDB क्वेरी करने के लिए एक सरल जेसन-आधारित विधि प्रदान करता है।

मुख्य विशेषताएं

 * एसिड शब्दार्थ
 * काउचडीबी परमाणुता, स्थिरता, अलगाव, स्थायित्व शब्दार्थ प्रदान करता है। यह बहु-संस्करण समवर्ती नियंत्रण के एक फॉर्म को लागू करके ऐसा करता है, जिसका अर्थ है कि काउचडीबी बिना किसी विरोध के समवर्ती पाठकों और लेखकों की उच्च मात्रा को संभाल सकता है।


 * ऑफ़लाइन के लिए निर्मित
 * काउचडीबी उन उपकरणों (जैसे स्मार्टफोन) की नकल कर सकता है जो ऑफ़लाइन हो सकते हैं और डिवाइस के वापस ऑनलाइन होने पर आपके लिए डेटा सिंक को संभाल सकते हैं।


 * प्रतिकृति के साथ वितरित वास्तुकला
 * काउचडीबी को द्वि-दिशात्मक प्रतिकृति (या सिंक्रनाइज़ेशन) और ऑफ़लाइन ऑपरेशन को ध्यान में रखकर डिज़ाइन किया गया था। इसका मतलब है कि एकाधिक प्रतिकृतियां एक ही डेटा की अपनी प्रतियां रख सकती हैं, इसे संशोधित कर सकती हैं, और फिर बाद में उन परिवर्तनों को सिंक कर सकती हैं।


 * डॉक्यूमेंट भंडारण
 * काउचडीबी डेटा को डॉक्यूमेंटों के रूप में संग्रहीत करता है, JSON के रूप में व्यक्त एक या अधिक फ़ील्ड/मूल्य जोड़े के रूप में। फ़ील्ड मान स्ट्रिंग, संख्या या दिनांक जैसी सरल चीजें हो सकते हैं; लेकिन ऐरे डेटा संरचना और सहयोगी ऐरे का भी उपयोग किया जा सकता है। काउचडीबी डेटाबेस में प्रत्येक डॉक्यूमेंट की एक अद्वितीय आईडी होती है और कोई आवश्यक डॉक्यूमेंट स्कीमा नहीं होता है।


 * अंततः संगति
 * काउचडीबी उपलब्धता और विभाजन सहनशीलता दोनों प्रदान करने में सक्षम होने के लिए अंतिम स्थिरता की गारंटी देता है।


 * मानचित्र/दृश्य और अनुक्रमणिका कम करें
 * संग्रहीत डेटा को दृश्यों का उपयोग करके संरचित किया जाता है। काउचडीबी में, प्रत्येक दृश्य का निर्माण एक जावास्क्रिप्ट फ़ंक्शन द्वारा किया जाता है जो मानचित्र के आधे भाग (उच्च-क्रम फ़ंक्शन)/रिड्यूस ऑपरेशन के रूप में कार्य करता है। फ़ंक्शन एक डॉक्यूमेंट लेता है और उसे वापस लौटाए जाने वाले एकल मान में बदल देता है। काउचडीबी दृश्यों को अनुक्रमित कर सकता है और उन अनुक्रमणिकाओं को डॉक्यूमेंटों के जोड़े जाने, हटाए जाने या अद्यतन किए जाने पर अद्यतन रख सकता है।


 * HTTP एपीआई
 * सभी आइटम में एक अद्वितीय यूआरआई होता है जो HTTP के माध्यम से उजागर होता है। यह सभी संसाधनों पर चार बुनियादी क्रिएट, रीड, अपडेट और डिलीट (क्रिएट, रीड, अपडेट, डिलीट) संचालन के लिए हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल#रिक्वेस्ट विधियों POST, GET, PUT और DELETE का उपयोग करता है।

काउचडीबी फ़ॉक्सटन नामक वेब के माध्यम से सुलभ एक अंतर्निहित प्रशासन इंटरफ़ेस भी प्रदान करता है।

मामलों और उत्पादन परिनियोजन का उपयोग करें
काउचडीबी की प्रतिकृति और सिंक्रनाइज़ेशन क्षमताएं इसे मोबाइल उपकरणों में उपयोग करने के लिए आदर्श बनाती हैं, जहां नेटवर्क कनेक्शन की गारंटी नहीं है, और एप्लिकेशन को ऑफ़लाइन काम करते रहना चाहिए।

काउचडीबी उन अनुप्रयोगों के लिए उपयुक्त है जिनमें डेटा जमा होता है, कभी-कभी बदलता रहता है, जिस पर पूर्व-परिभाषित क्वेरी चलायी जानी हैं और जहां संस्करण बनाना महत्वपूर्ण है (उदाहरण के लिए सीआरएम, सीएमएस सिस्टम)। मास्टर-मास्टर प्रतिकृति एक विशेष रूप से दिलचस्प सुविधा है, जो आसान मल्टी-साइट तैनाती की अनुमति देती है।

उपयोगकर्ता
काउचडीबी के उपयोगकर्ताओं में शामिल हैं:
 * CERN लार्ज हैड्रान कोलाइडर  में डेटा प्रबंधन प्रणाली के लिए डेटाबेस के रूप में काउचडीबी का उपयोग करता है।
 * रेड क्रॉस आपदा क्षेत्रों में इलेक्ट्रॉनिक रूप से केसवर्क पूरा करने के लिए iDAT एप्लिकेशन का उपयोग करता है। यहां काउचडीबी का उपयोग मल्टी-नोड पीयर-टू-पीयर ऑफ़लाइन-प्रथम डेटाबेस के रूप में किया जाता है।
 * आईबीएम क्लाउड सेवाएं बुनियादी स्तर पर काउचडीबी पर आधारित हैं।
 * यूनाइटेड एयरलाइन्स 3,000 से अधिक विमानों में उड़ान के दौरान मनोरंजन प्रणालियों के लिए काउचडीबी का उपयोग करती है।
 * एमॅड्यूस आईटी समूह, उनके कुछ बैक-एंड सिस्टम के लिए।
 * स्विस क्रेडिट, कमोडिटी विभाग में उनके बाज़ार ढांचे के लिए आंतरिक उपयोग के लिए।
 * मीबो, उनके सोशल प्लेटफॉर्म (वेब ​​और एप्लिकेशन) के लिए। Google द्वारा Meebo का अधिग्रहण कर लिया गया और अधिकांश उत्पाद 12 जुलाई 2012 को बंद कर दिए गए।
 * npm (सॉफ्टवेयर) अपने पैकेज रजिस्ट्री के लिए प्रतिकृति डेटाबेस के रूप में काउचडीबी का उपयोग करता है।
 * सोफोस, उनके कुछ बैक-एंड सिस्टम के लिए।
 * बीबीसी, एक गतिशील सीएमएस-प्लेटफ़ॉर्म के लिए।
 * कैनोनिकल (कंपनी) ने 2009 में अपनी सिंक्रोनाइज़ेशन सेवा उबंटू वन के लिए इसका उपयोग शुरू किया, लेकिन नवंबर 2011 में इसका उपयोग बंद कर दिया।
 * नहर+|कैनाल+, कैनाल+ ओवरसीज में अंतरराष्ट्रीय ऑन-डिमांड प्लेटफॉर्म के लिए।
 * प्रोटोग्रिड, उनके तीव्र अनुप्रयोग विकास ढांचे के लिए स्टोरेज बैक-एंड के रूप में

डेटा हेरफेर: डॉक्यूमेंट और विचार
काउचडीबी JSON डॉक्यूमेंटों के संग्रह का प्रबंधन करता है। डॉक्यूमेंटों को दृश्यों के माध्यम से व्यवस्थित किया जाता है। दृश्यों को समग्र कार्यों के साथ परिभाषित किया जाता है और फ़िल्टर की गणना समानांतर में की जाती है, बिल्कुल MapReduce की तरह।

दृश्य आम तौर पर डेटाबेस में संग्रहीत होते हैं और उनकी अनुक्रमणिकाएँ लगातार अद्यतन की जाती हैं। काउचडीबी बाहरी सॉकेट सर्वर और JSON-आधारित प्रोटोकॉल का उपयोग करके एक व्यू सिस्टम का समर्थन करता है। परिणामस्वरूप, व्यू सर्वर विभिन्न भाषाओं में विकसित किए गए हैं (जावास्क्रिप्ट डिफ़ॉल्ट है, लेकिन PHP, रूबी, पायथन और एरलांग भी हैं)।

HTTP के माध्यम से डेटा तक पहुंच
एप्लिकेशन HTTP के माध्यम से काउचडीबी के साथ इंटरैक्ट करते हैं। निम्नलिखित कमांड-लाइन उपयोगिता cURL का उपयोग करके कुछ उदाहरण प्रदर्शित करता है। ये उदाहरण मानते हैं कि काउचडीबी पोर्ट 5984 पर स्थानीय होस्ट  (127.0.0.1) पर चल रहा है।

मुक्त स्रोत घटक
काउचडीबी में इसके डिफ़ॉल्ट पैकेज के हिस्से के रूप में कई अन्य ओपन सोर्स प्रोजेक्ट शामिल हैं।

यह भी देखें

 * डॉक्यूमेंट-उन्मुख डेटाबेस
 * एक्सएमएल डेटाबेस

बाहरी संबंध

 * काउचडीबी: The Definitive Guide
 * Complete HTTP API Reference
 * Simple PHP5 library to communicate with काउचडीबी
 * Asynchronous काउचडीबी client for Java
 * Asynchronous काउचडीबी client for Scala
 * Asynchronous काउचडीबी client for Scala