क्या कोई NoSQL डेटा स्टोर है जो ACID कंप्लेंट है?
क्या कोई NoSQL डेटा स्टोर है जो ACID कंप्लेंट है?
जवाबों:
मैं इसे विशुद्ध रूप से बातचीत का समर्थन करने के लिए उत्तर के रूप में पोस्ट करूंगा - टिम माही , नर्वोथ और क्रेगटीपी ने व्यवहार्य डेटाबेस का सुझाव दिया है। Erlang के उपयोग के कारण CouchDB मेरा पसंदीदा होगा , लेकिन वहाँ वहाँ बाहर दूसरों रहे हैं।
मैं कहूंगा कि ACID NoSQL की अवधारणा का विरोधाभासी या नकारात्मक नहीं करता है ... जबकि वहाँ एक प्रवृत्ति है जो कि कबूतर द्वारा व्यक्त की गई राय का अनुसरण करती है , मेरा मानना है कि अवधारणाएँ अलग हैं।
NoSQL मूल रूप से सरल कुंजी-मूल्य (उदाहरण के लिए रेडिस) या दस्तावेज़-शैली स्कीमा ("दस्तावेज़" मॉडल में कुंजी-मूल्य वाले जोड़े, जैसे MongoDB) को शास्त्रीय RDBMS में स्पष्ट स्कीमा के प्रत्यक्ष विकल्प के रूप में लिया जाता है। यह डेवलपर को विषम रूप से चीजों का इलाज करने की अनुमति देता है , जबकि पारंपरिक इंजन ने डेटा मॉडल में कठोर समान-नेस लागू किया है । यह बहुत दिलचस्प है क्योंकि यह परिवर्तन से निपटने का एक अलग तरीका प्रदान करता है , और बड़े डेटा सेट के लिए यह वॉल्यूम और प्रदर्शन से निपटने के लिए दिलचस्प अवसर प्रदान करता है।
ACID यह सिद्धान्त प्रदान करता है कि डेटाबेस में परिवर्तन कैसे लागू होते हैं। बहुत ही सरल तरीके से, यह कहा गया है (मेरा अपना संस्करण):
जब यह प्रचार और बाधाओं का विचार आता है तो बातचीत थोड़ी अधिक रोमांचक हो जाती है । कुछ आरडीबीएमएस इंजन बाधाओं (जैसे विदेशी कुंजी) को लागू करने की क्षमता प्रदान करते हैं जिसमें प्रसार तत्व (एक ला कैस्केड ) हो सकते हैं। सरल शब्दों में, एक "चीज़" का डेटाबेस में एक और "चीज़" के साथ संबंध हो सकता है, और यदि आप एक विशेषता को बदलते हैं तो इसके लिए दूसरे को बदलने की आवश्यकता हो सकती है (अद्यतन, हटाए गए, ... बहुत सारे विकल्प)। NoSQL डेटाबेस, मुख्य रूप से (इस समय) उच्च डेटा वॉल्यूम और उच्च ट्रैफ़िक पर ध्यान केंद्रित करते हुए, वितरित अपडेट के विचार से निपटते हुए प्रतीत होते हैं, जो कि (उपभोक्ता परिप्रेक्ष्य से) मनमाने समय फ़्रेम में होता है। यह मूल रूप से का एक विशेष रूप है प्रतिकृति माध्यम से प्रबंधित किया जाता हैलेनदेन - तो मैं कहूंगा कि यदि कोई पारंपरिक वितरित डेटाबेस ACID का समर्थन कर सकता है, तो एक NoSQL डेटाबेस कर सकता है।
आगे पढ़ने के लिए कुछ संसाधन:
अद्यतन (27 जुलाई 2012): विकिपीडिया लेख के लिंक को उस लेख के संस्करण को प्रतिबिंबित करने के लिए अद्यतन किया गया है जो इस उत्तर के पोस्ट होने पर वर्तमान था। कृपया ध्यान दें कि वर्तमान विकिपीडिया लेख को बड़े पैमाने पर संशोधित किया गया है!
NoSQL पर एक विकिपीडिया लेख के पुराने संस्करण के अनुसार, ठीक है :
NoSQL गैर-संबंधपरक डेटा स्टोर के शिथिल परिभाषित वर्ग को बढ़ावा देने वाला एक आंदोलन है जो रिलेशनल डेटाबेस और ACAC गारंटी के लंबे इतिहास के साथ टूटता है।
और भी:
यह नाम गैर-संबंधपरक, वितरित डेटा स्टोरों की बढ़ती संख्या के उद्भव का वर्णन करने का एक प्रयास था जो अक्सर एसीटी गारंटी प्रदान करने का प्रयास नहीं करता था।
तथा
NoSQL सिस्टम अक्सर कमजोर संगतता गारंटी प्रदान करते हैं जैसे कि अंतिम स्थिरता और एकल डेटा आइटम तक सीमित लेनदेन, भले ही एक पूरक मिडलवेयर परत जोड़कर पूर्ण ACID गारंटी प्रदान कर सकते हैं।
इसलिए, संक्षेप में, मैं कहूंगा कि "NoSQL" डेटा स्टोर के मुख्य लाभों में से एक ACID गुणों की अपनी अलग कमी है । इसके अलावा, IMHO, जितना अधिक ACID गुणों को लागू करने और लागू करने की कोशिश करता है, उतना ही आगे आपको "NoSQL" डेटा स्टोर की "आत्मा" से दूर होता है, और एक "सही" RDBMS के करीब आपको मिलता है (अपेक्षाकृत बोलने वाला), के करीब )।
हालाँकि, सभी ने कहा, "NoSQL" एक बहुत अस्पष्ट शब्द है और व्यक्तिगत व्याख्याओं के लिए खुला है, और यह इस बात पर बहुत निर्भर करता है कि आपके पास कितना शुद्ध दृष्टिकोण है। उदाहरण के लिए, सबसे आधुनिक दिन RDBMS प्रणाली वास्तव में का पालन नहीं करते सब के एडगर एफ कॉड के 12 नियमों उसकी की संबंध मॉडल !
व्यावहारिक दृष्टिकोण लेते हुए, ऐसा प्रतीत होता है कि अपाचे का काउचडीबी एसीआईडी-अनुपालन दोनों को मूर्त रूप देने के सबसे करीब है, जबकि शिथिल-युग्मित, गैर-संबंधपरक "नोएसक्यूएल" मानसिकता को बनाए रखते हुए।
कृपया सुनिश्चित करें कि आपने NoSQL डेटाबेस के बारे में मार्टिन फाउलर परिचय पढ़ा । और संबंधित वीडियो।
सबसे पहले, हम दो प्रकार के NoSQL डेटाबेस को अलग कर सकते हैं:
डिजाइन के अनुसार, अधिकांश ग्राफ-उन्मुख डेटाबेस ACID हैं !
फिर, अन्य प्रकारों के बारे में क्या?
सकल-उन्मुख डेटाबेस में, हम तीन उप-प्रकार रख सकते हैं:
जिसे हम यहां एक एग्रीगेट कहते हैं, वह यह है कि एरिक इवांस ने अपने डोमेन-ड्रिवेन डिज़ाइन में किसी दिए गए बाउंडेड कॉन्टेक्ट में एंटिटीज़ और वैल्यू-ऑब्जेक्ट्स की आत्मनिर्भरता के रूप में परिभाषित किया है ।
एक परिणाम के रूप में, एक कुल डेटा का एक संग्रह है जिसे हम एक इकाई के रूप में बातचीत करते हैं। एग्रीगेट डेटाबेस के साथ ACID संचालन के लिए सीमा बनाते हैं। (मार्टिन फाउलर)
इसलिए, एग्रीगेट स्तर पर, हम कह सकते हैं कि अधिकांश NoSQL डेटाबेस ACID RDBMS की तरह ही सुरक्षित हो सकते हैं , उचित सेटिंग्स के साथ। बेशक, यदि आप अपने सर्वर को सबसे अच्छी गति के लिए ट्यून करते हैं, तो आप कुछ गैर एसीआईडी में आ सकते हैं। लेकिन प्रतिकृति मदद करेगी।
मेरा मुख्य बिंदु यह है कि आपको NoSQL डेटाबेस का उपयोग करना होगा क्योंकि वे RDBMS के विकल्प (सस्ते) के रूप में नहीं हैं। मैंने दस्तावेजों के बीच संबंधों का दुरुपयोग करते हुए बहुत अधिक परियोजनाएं देखी हैं। यह ACID नहीं हो सकता। अगर आप डॉक्यूमेंट लेवल पर रहते हैं, यानी एग्रीगेट बाउंड्रीज में, तो आपको किसी ट्रांजैक्शन की जरूरत नहीं है। और आपका डेटा ACID डेटाबेस के साथ भी उतना ही सुरक्षित होगा, भले ही वह सही मायने में ACID ही क्यों न हो, क्योंकि आपको उन लेनदेन की आवश्यकता नहीं है! यदि आपको लेनदेन की आवश्यकता है और एक साथ कई "दस्तावेज़" अपडेट करने हैं, तो आप NoSQL दुनिया में नहीं हैं - इसलिए इसके बजाय RDBMS इंजन का उपयोग करें!
कुछ २०१ ९ अपडेट: संस्करण ४.० में शुरू, उन स्थितियों के लिए, जिन्हें कई दस्तावेज़ों के अद्यतन के लिए परमाणुता की आवश्यकता होती है या कई दस्तावेज़ों के बीच स्थिरता होती है, MongoDB प्रतिकृति सेटों के लिए बहु-दस्तावेज़ लेनदेन प्रदान करता है ।
FoundationDB ACID अनुपालन है:
इसमें उचित लेन-देन है, जिससे आप ACID फैशन में कई अलग-अलग डेटा आइटम अपडेट कर सकते हैं। इसका उपयोग उच्च स्तर पर अनुक्रमित को बनाए रखने के लिए नींव के रूप में किया जाता है।
इस सवाल में किसी को ओरिएंटबीडी का उल्लेख करना चाहिए : ओरिएंटबीडी एक नोएसक्यूएल डेटाबेस है, कुछ में से एक, जो पूरी तरह से एसीआईडी लेनदेन का समर्थन करता है। ACID केवल RDBMS के लिए नहीं है क्योंकि यह संबंधपरक बीजगणित का हिस्सा नहीं है। इसलिए यह एक NoSQL डेटाबेस है कि ACID का समर्थन करने के लिए संभव है।
यह सुविधा वह है जिसे मैं MongoDB में सबसे अधिक याद करता हूं
ACID और NoSQL पूरी तरह से ऑर्थोगोनल हैं। एक दूसरे को इम्प्रेस नहीं करता।
मेरे पास मेरी मेज पर एक नोटबुक है, मैं इसका उपयोग उन चीजों पर नोट्स रखने के लिए करता हूं जो मुझे अभी भी करना है। यह नोटबुक एक NoSQL डेटाबेस है। मैंने इसे "पेज कैश" के साथ एक रेखीय खोज का उपयोग करके क्वेरी की है, इसलिए मुझे हमेशा हर पृष्ठ को खोजने की आवश्यकता नहीं है। यह एसीआईडी अनुपालन भी है क्योंकि मैं यह सुनिश्चित करता हूं कि मैं एक बार में केवल एक ही चीज लिखूं और जब मैं इसे पढ़ रहा हूं तो कभी भी नहीं।
NoSQL का सीधा सा मतलब है कि यह SQL नहीं है। बहुत से लोग भ्रमित हो जाते हैं और सोचते हैं कि इसका मतलब है अत्यधिक स्केलेबल-वाइल्ड-वेस्ट-सुपर-फास्ट-स्टोरेज। यह नहीं है इसका मतलब की-वैल्यू स्टोर या अंतिम स्थिरता नहीं है। इसका मतलब यह है कि "एसक्यूएल नहीं" है, इस ग्रह में बहुत सारे डेटाबेस हैं और उनमें से अधिकांश एसक्यूएल नहीं हैं [उद्धरण वांछित] ।
आप अन्य उत्तरों में कई उदाहरण पा सकते हैं, इसलिए मुझे उन्हें यहां सूचीबद्ध करने की आवश्यकता नहीं है, लेकिन विभिन्न कार्यों के लिए एसीआईडी अनुपालन के साथ गैर-एसक्यूएल डेटाबेस हैं, कुछ एकल ऑब्जेक्ट के लिए केवल एसीआईडी हैं लिखते हैं जबकि कुछ अधिक गारंटी देते हैं। प्रत्येक डेटाबेस अलग है।
"NoSQL" एक अच्छी तरह से परिभाषित शब्द नहीं है। यह बहुत अस्पष्ट अवधारणा है। इस प्रकार, यह कहना भी संभव नहीं है कि "NoSQL" उत्पाद क्या है और क्या नहीं है। लेबल के साथ टाइप किए गए लगभग सभी उत्पाद कुंजी-मूल्य वाले स्टोर नहीं हैं।
NoSQL का दादा: ZODB ACID कंप्लेंट है। http://www.zodb.org/
हालाँकि, यह केवल पायथन है।
NoSQL के प्रवर्तकों में से एक के रूप में (मैं Apache CouchDB के लिए एक प्रारंभिक योगदानकर्ता था, और 2009 में CBS इंटरएक्टिव / CNET में आयोजित पहली NoSQL घटना में एक वक्ता ) मैं नए एल्गोरिदम को देखने के लिए उत्साहित हूं जो संभावनाएं पैदा करता है जो पहले मौजूद नहीं थे । केल्विन प्रोटोकॉल कैप और PACELC जैसी भौतिक बाधाओं के बारे में सोचने का एक नया तरीका प्रदान करता है ।
सक्रिय / निष्क्रिय async प्रतिकृति, या सक्रिय / सक्रिय सिंक्रोनस प्रतिकृति के बजाय, कैल्विन लेनदेन लॉग बनाए रखने के लिए RAFT जैसे प्रोटोकॉल का उपयोग करके प्रतिकृति आउटेज के दौरान शुद्धता और उपलब्धता को बनाए रखता है। इसके अतिरिक्त, प्रत्येक प्रतिकृति पर लेन-देन को नियतकालिक रूप से संसाधित किया जाता है, गतिरोध की क्षमता को दूर करता है, इसलिए सहमति केवल एक ही दौर की सहमति से हासिल की जाती है। यह दुनिया भर में बहु-क्लाउड पर भी तेजी से तैनाती करता है।
FaunaDB कैल्विन प्रोटोकॉल का उपयोग करने वाला एकमात्र डेटाबेस कार्यान्वयन है, जो इसे वर्कलोड के लिए विशिष्ट रूप से अनुकूल बनाता है जिसमें NoSQL पैमाने और लचीलेपन के साथ मेनफ्रेम जैसी डेटा अखंडता की आवश्यकता होती है।
यदि आप एक ACID आज्ञाकारी कुंजी / मूल्य की दुकान की तलाश कर रहे हैं, तो बर्कले DB है । के अलावा ग्राफ डेटाबेस कम से कम Neo4j और HyperGraphDB एसिड लेनदेन (HyperGraphDB वास्तव में पल में निम्न स्तर के भंडारण के लिए बर्कले DB उपयोग करता है) प्रदान करते हैं।
यह अवधारणा विकिपीडिया योगदानकर्ताओं के रूप में परिभाषित है:
[...] आधुनिक रिलेशनल डेटाबेस प्रबंधन प्रणालियों का एक वर्ग जो ऑनलाइन लेनदेन प्रसंस्करण (ओएलटीपी) के लिए एक ही स्केलेबल प्रदर्शन प्रदान करने की कोशिश करता है, जो एक पारंपरिक डेटाबेस सिस्टम की एसीआईडी गारंटी को बनाए रखते हुए रीड-राइट वर्कलोड को पढ़ता है।
[1][2][3]
[1]
नैन्सी लिंच और सेठ गिल्बर्ट, "ब्रूयर के अनुमान और सुसंगत, उपलब्ध, विभाजन-सहिष्णु वेब सेवाओं की व्यवहार्यता" , एसीएम सिगच न्यूज़, वॉल्यूम 33 अंक 2 (2002), स्नातकोत्तर। 51-59।
[2]
" ब्रूअर की कैप प्रमेय" , julianbrowne.com, 02-Mar-2010 को पुनःप्राप्त
[3]
" ब्रूवर्स कैप प्रमेय पर वितरित सिस्टम" , royans.net
MongoDB ने घोषणा की कि इसका 4.0 संस्करण बहु-दस्तावेज़ लेनदेन के लिए ACID अनुरूप होगा।
संस्करण 4.2। यह तयशुदा सेटअप के तहत समर्थन करने वाला है।
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
FoundationDB का उल्लेख किया गया था और उस समय यह खुला स्रोत नहीं था। यह Apple द्वारा दो दिन पहले खोला गया है: https://www.foundationdb.org/blog/foundationdb-is-open-source/
मेरा मानना है कि यह एसीआईडी कंप्लेंट है।
विकल्पों की सूची में जोड़ने के लिए, एक और पूरी तरह से ACID आज्ञाकारी NoSQL डेटाबेस GT.M है ।
Hyperdex Warp http://hyperdex.org/warp/ Warp (ACID फीचर) मालिकाना है, लेकिन हाइपरडेक्स मुफ्त है।
db4o
रोल-अपनी-अपनी दृढ़ता या क्रमबद्धता के विपरीत, db4o ACID लेनदेन सुरक्षित है और रनटाइम के दौरान क्वेरी, प्रतिकृति और स्कीमा परिवर्तन की अनुमति देता है
टारनटूल पूरी तरह से ACID NoSQL डेटाबेस है। आप सीआरयूडी संचालन या संग्रहीत प्रक्रियाओं को जारी कर सकते हैं, सब कुछ एसीआईडी संपत्ति के साथ सख्त अनुसार चलाया जाएगा। आप इसके बारे में यहां भी पढ़ सकते हैं: http://stable.tarantool.org/doc/mpage/data-and-persistin.html
MarkLogic भी ACID कंप्लेंट है। मुझे लगता है कि अब सबसे बड़े खिलाड़ियों में से एक है।
बर्गबडी एक हल्के वजन वाला, खुला-स्रोत है, NoSQL डेटाबेस जिसे ACID लेनदेन चलाने के लिए शुरू से डिज़ाइन किया गया है। वास्तव में, बर्गबडी इस अर्थ में सबसे अधिक SQL डेटाबेस से "अधिक" ACID है कि डेटाबेस की स्थिति को बदलने का एकमात्र तरीका ACID लेन-देन को उच्चतम अलगाव स्तर (SQL शब्द: "क्रमबद्ध") से चलाना है। गंदे रीड्स, नॉन-रिपीटेबल रीड्स या फैंटम रीड्स के साथ कोई समस्या नहीं होगी।
मेरी राय में, डेटाबेस अभी भी अत्यधिक प्रदर्शनशील है; लेकिन मुझ पर भरोसा मत करो, मैंने सॉफ्टवेयर बनाया। इसके बजाय खुद कोशिश करें।
बहुत सारे आधुनिक NoSQL समाधान ACID लेनदेन (परमाणु पृथक बहु-कुंजी अद्यतन) का समर्थन नहीं करते हैं, लेकिन उनमें से अधिकांश प्राथमिकताओं का समर्थन करते हैं जो आपको आवेदन स्तर पर लेनदेन को लागू करने की अनुमति देते हैं।
यदि कोई डेटा स्टोर प्रति कुंजी रैखिकता और तुलना-और-सेट (दस्तावेज़ स्तर की परमाणुता) का समर्थन करता है, तो यह क्लाइंट-साइड लेनदेन को लागू करने के लिए पर्याप्त है, इससे अधिक आपके पास चुनने के लिए कई विकल्प हैं:
यदि आपको Serializable आइसोलेशन स्तर की आवश्यकता है तो आप उसी एल्गोरिथ्म का अनुसरण कर सकते हैं, जो Google Perroator सिस्टम के लिए उपयोग करता है या CockroachDB के लिए Cockroach Labs । मैंने इसके बारे में ब्लॉग किया है और चरण-दर-चरण विज़ुअलाइज़ेशन बनाता हूं, मुझे उम्मीद है कि यह एल्गोरिथम के पीछे के मुख्य विचार को समझने में आपकी मदद करेगा।
यदि आप उच्च विवाद की उम्मीद करते हैं, लेकिन यह आपके लिए ठीक है कि प्रतिबद्ध अलगाव स्तर पढ़ें तो कृपया पीटर बेलीस द्वारा RAMP लेनदेन पर एक नज़र डालें।
तीसरा तरीका यह है कि क्षतिपूर्ति लेनदेन का उपयोग सागा पैटर्न के रूप में भी जाना जाता है। इसका वर्णन 80 के दशक के उत्तरार्ध में सागास पेपर में किया गया था, लेकिन वितरित प्रणालियों की वृद्धि के साथ और अधिक वास्तविक हो गया। कृपया प्रेरणा के लिए गाथा पैटर्न लागू करते हुए देखें ।
क्लाइंट साइड लेनदेन के लिए उपयुक्त डेटा स्टोर की सूची में हल्के लेनदेन के साथ कैसेंड्रा, सुसंगत बाल्टियों के साथ रीक, रीथिंकडीबी, ज़ूकेपर, ईटीडीसी, एचबीएएस, डायनमोडीबी, मोंगोडीबी और अन्य शामिल हैं।
YugaByte DB क्वेरी परत पर एक ACID कंप्लेंट वितरित txns के साथ-साथ Redis और CQL API संगतता का समर्थन करता है ।
VoltDB एक एंट्रेंट है जो ACID अनुपालन का दावा करता है, और जब यह अभी भी SQL का उपयोग करता है, तो इसका लक्ष्य मापनीयता के संदर्भ में समान होता है
नोड लेवलअप ट्रांसेक्शनल है और leveldb पर बनाया गया है https://github.com/rvagg/node-leveln##atch
DynamoDB एक NoSQL डेटाबेस है और इसमें ACID लेनदेन है ।
न केवल NoSQL डिजाइन द्वारा ACID अनुरूप नहीं है। NoSQL आंदोलन ने बेस (मूल रूप से उपलब्ध, नरम स्थिति, अंततः स्थिरता) को गले लगा लिया जो ACID के विपरीत होने का दावा करता है। NoSQL डेटाबेस को अक्सर Event-Consisted डेटाबेस कहा जाता है। अंतर को समझने के लिए आपको कैप प्रमेय (उर्फ ब्रेवर प्रमेय) में ड्रिल करना चाहिए
यात्रा http://www.julianbrowne.com/article/viewer/brewers-cap-theorem