संबंधपरक डेटाबेस और ग्राफ़ डेटाबेस की तुलना


90

क्या कोई मुझे एक संबंध डेटाबेस के लिए फायदे और नुकसान की व्याख्या कर सकता है जैसे कि MySQL जैसे Neo4j जैसे ग्राफ डेटाबेस की तुलना में?

एसक्यूएल में आपके पास उन्हें जोड़ने वाली विभिन्न आईडी के साथ कई टेबल हैं। फिर आपको तालिकाओं को जोड़ने के लिए शामिल होना होगा। एक नौसिखिया के दृष्टिकोण से आप एक डेटाबेस के साथ शुरू से किनारों के रूप में स्पष्ट कनेक्शन होने के बजाय डेटाबेस को क्यों डिजाइन करेंगे। वैचारिक रूप से यह एक नौसिखिया के लिए कोई मतलब नहीं होगा। संभवत: इसके लिए बहुत तकनीकी लेकिन गैर-वैचारिक कारण है?


पहुंच के तरीके अलग-अलग हैं। एक रिलेशनल डेटाबेस में, आप रिलेशनल अलजेब्रा का उपयोग करते हैं, जो रिकर्सियन के साथ सबसे अच्छा संवर्धित है, एक अजीब लेकिन लोकप्रिय प्रतिनिधित्व है, जो (पुनरावर्ती, प्रक्रियात्मक अतिरिक्त के साथ) एसक्यूएल है। एक ग्राफ डेटाबेस में, आप ग्राफ ट्रेवरल भाषाओं जैसे ग्रेमलिन का उपयोग करते हैं । ऑन-डिस्क लेआउट में अंतर्निहित डीबी कार्यान्वयन संबंधित पहुंच विधि के लिए सर्वश्रेष्ठ प्रदर्शन प्रदान करने के लिए चुना जाएगा, और कार्यान्वयन में मध्यस्थ ट्यूनिंग / भिन्नता पाई जा सकती है।
डेविड टोनहोफर 21

जवाबों:


115

वास्तव में दोनों शैलियों के पीछे वैचारिक तर्क है। रिलेशनल मॉडल और ग्राफ डेटाबेस पर विकिपीडिया इसके अच्छे साक्षात्कार देता है।

प्राथमिक अंतर यह है कि एक ग्राफ डेटाबेस में, रिश्तों को व्यक्तिगत रिकॉर्ड स्तर पर संग्रहीत किया जाता है, जबकि एक रिलेशनल डेटाबेस में, संरचना को उच्च स्तर (टेबल परिभाषाओं) में परिभाषित किया जाता है।

इसके महत्वपूर्ण प्रभाव हैं:

  • बड़ी संख्या में रिकॉर्ड्स पर काम करते समय एक रिलेशनल डेटाबेस बहुत तेज़ होता है। ग्राफ़ डेटाबेस में, डेटा की संरचना निर्धारित करने के लिए क्वेरी के दौरान प्रत्येक रिकॉर्ड को व्यक्तिगत रूप से जांचना पड़ता है, जबकि यह रिलेशनल डेटाबेस में समय से पहले जाना जाता है।
  • संबंधपरक डेटाबेस कम संग्रहण स्थान का उपयोग करते हैं, क्योंकि उन्हें उन सभी रिश्तों को संग्रहीत करने की आवश्यकता नहीं है।

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


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

4
आप कहते हैं: "एक ग्राफ़ डेटाबेस में, डेटा की संरचना निर्धारित करने के लिए प्रत्येक रिकॉर्ड को एक क्वेरी के दौरान व्यक्तिगत रूप से जांचना होगा"। क्या यह सामान्य रूप से ग्राफ डेटाबेस या अधिक या कम सच की एक सार्वभौमिक संपत्ति है? कैसे OrientDb के बारे में जो कोने और किनारों के लिए पूर्ण स्कीमा का समर्थन करता है?
Lodewijk बोगार्ड्स

@LodewijkBoga कुछ ग्राफ डेटाबेस, जैसे Neo4j, बुनियादी अनुक्रमण की अनुमति देते हैं। यदि क्वेरी इंडेक्स को हिट करती है, तो मेरा मानना ​​है कि इंडेक्स के पीछे डेटा की संरचना को निर्धारित करने की कोई आवश्यकता नहीं है। लेकिन यह क्वेरी पर निर्भर करता है।
Vojtích Vít

3
मैं दोनों बिंदुओं पर दृढ़ता से असहमत हूं। विदेशी कुंजी होने पर ग्राफ़ डेटाबेस हमेशा तेज़ होता है। क्योंकि हमें ऑपरेशन में शामिल होने की आवश्यकता नहीं है। रिलेशनल डेटाबेस में विदेशी कुंजी को कई तालिकाओं में संग्रहित करना होता है। एक किनारे और एक विदेशी कुंजी को एक ही भंडारण स्थान लेना चाहिए।
Cegprakash

3
@cegprakash क्या आपके पास भी एक दस्तावेज है जिससे हम भी निष्कर्ष निकाल सकते हैं?
विक्टर

102

ग्राफ़ और रिलेशनल डेटाबेस के बीच मुख्य अंतर यह है कि रिलेशनल डेटाबेस सेट के साथ काम करते हैं जबकि ग्राफ़ डेटाबेस पथ के साथ काम करते हैं।

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

जैसा कि Dan1111 ने संकेत दिया, अधिकांश ग्राफ़ डेटाबेस इस तरह के जोड़ों के दर्द को नहीं झेलते क्योंकि वे एक मौलिक स्तर पर संबंधों को व्यक्त करते हैं। यही है, रिश्ते शारीरिक रूप से डिस्क पर मौजूद हैं और उन्हें नाम, निर्देश दिया गया है और खुद को गुणों से सजाया जा सकता है (इसे संपत्ति ग्राफ मॉडल कहा जाता है, देखें: https://github.com/tinkerpop/blueprints/wiki/Property.Graph -मॉडल )। इसका मतलब है कि यदि आपने चुना है, तो आप डिस्क पर रिश्तों को देख सकते हैं और देख सकते हैं कि वे कैसे "जुड़ाव" करते हैं। इसलिए संबंध एक ग्राफ डेटाबेस में प्रथम श्रेणी के निकाय हैं और एक संबंधपरक स्टोर में रनटाइम पर उन निहित संबंधों की तुलना में शब्दबद्ध रूप से कहीं अधिक मजबूत हैं।

तो आपको क्यों परवाह करनी चाहिए? दो कारणों से:

  1. कनेक्टेड डेटा के लिए रिलेशनल डेटाबेस की तुलना में ग्राफ डेटाबेस बहुत तेज है - अंतर्निहित मॉडल की ताकत। इसका एक परिणाम यह है कि एक ग्राफ़ डेटाबेस में क्वेरी लेटेंसी, किसी क्वेरी में एक्सप्लोर करने के लिए आपके द्वारा चुने गए ग्राफ़ के अनुपात के समानुपाती होती है, और संग्रहीत डेटा की मात्रा के लिए आनुपातिक नहीं होती है, इस प्रकार ज्वाइन बम को डिफ्यूज़ करती है ।
  2. ग्राफ़ डेटाबेस मॉडलिंग और क्वेरी को बहुत अधिक सुखद अर्थ देता है तेजी से विकास और कम डब्ल्यूटीएफ क्षण। उदाहरण के लिए, Neo4j की साइफेयर क्वेरी भाषा में एक विशिष्ट सामाजिक नेटवर्क के लिए मित्र-के-मित्र को व्यक्त करना बस है MATCH (me)-[:FRIEND]->()-[:FRIEND]->(foaf) RETURN foaf

3
"संबंध इसलिए एक ग्राफ़ डेटाबेस में प्रथम श्रेणी के निकाय हैं"। एक रिलेशनल डेटाबेस में समान रूप से सच है: संबंधों को ट्यूपल्स में मैप किया जाता है, जैसा कि कई-कई रिश्ते हैं। क्या आप एक-कई रिश्तों के लिए भेद का वर्णन करते हैं, जिन्हें अक्सर इकाई संबंधों में विलय कर दिया जाता है?
बेल्डाज़

52
यह तुलना थोड़ी पक्षपातपूर्ण लगती है। कमियों के बारे में क्या?
कुरेन

9
थोड़ा सा? मेरी ईमानदार राय में भी पक्षपाती। एक "यह एक अच्छा उत्पाद है! इसे खरीदें" मुझे सबसे अच्छा लगता है!
इलगार

37
इसके लिए बड़े पैमाने पर चेतावनी की जरूरत है : यह लड़का नियो टेक्नोलॉजी में "मुख्य वैज्ञानिक" है, जो Neo4J ग्राफ डेटाबेस बनाते हैं।
रोब ग्रांट

4
कैसे एक मनमानी खोज के बारे में ... मुझे सभी उपयोगकर्ता दें जो 35 से 55 हैं और पिछले 90 दिनों में वॉलमार्ट पर खरीदारी करें।
मैथ्यू Whited

20

Dan1111 पहले से ही सही के रूप में चिह्नित एक उत्तर दिया है। अतिरिक्त अंक के एक जोड़े को पारित करने में ध्यान देने योग्य हैं।

सबसे पहले, ग्राफ डेटाबेस के लगभग हर कार्यान्वयन में, रिकॉर्ड "पिन किए गए" हैं क्योंकि इसके वर्तमान स्थान में रिकॉर्ड पर इंगित करने वाले अज्ञात संख्या में संकेत हैं। इसका मतलब यह है कि पुराने स्थान पर एक अग्रेषण पता छोड़ने या अज्ञात संख्या में तोड़ने वालों के बिना एक रिकॉर्ड को एक नए स्थान पर फेरबदल नहीं किया जा सकता है।

सैद्धांतिक रूप से, कोई एक बार में सभी रिकॉर्डों में फेरबदल कर सकता है और सभी बिंदुओं का पता लगाने और मरम्मत करने का एक तरीका निकाल सकता है। व्यवहार में यह एक ऐसा ऑपरेशन है जिसमें एक बड़े ग्राफ डेटाबेस पर हफ्तों लग सकते हैं, उस दौरान डेटाबेस को हवा से दूर रहना होगा। यह सिर्फ संभव नहीं है।

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

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

जब किसी वेब पेज को पुराने URL पर अग्रेषित पते को छोड़े बिना किसी भिन्न URL पर ले जाया जाता है, तो अज्ञात संख्या में हाइपरलिंक टूट जाएंगे। ये टूटे हुए लिंक फिर खूंखार, "त्रुटि 404: पृष्ठ नहीं मिला" संदेश को जन्म देते हैं जो इतने बड़े सर्जकों के आनंद को बाधित करता है।


4
केवल उस अधिकांश ग्राफ़ डेटाबेस में अखंडता नियम होते हैं जो टूटे हुए लिंक के लिए अनुमति नहीं देते हैं।
माइकल हंगर

1
यदि डीबीएमएस लक्ष्य को पिन करता है, तो यह स्पष्ट रूप से लिंक के लक्ष्य को स्थानांतरित करने के कारण लिंक टूटने को रोक देगा। मुझे ऐसे किसी भी ग्राफ़ डेटाबेस की जानकारी नहीं है जो रिकॉर्ड्स को पिन नहीं करता है जो लिंक के लक्ष्य हो सकते हैं।
वाल्टर मिती

क्या ग्राफ़ डेटाबेस आमतौर पर स्कीमा-कम होते हैं क्योंकि सभी बिंदुओं को फिर से लिखने की आवश्यकता के कारण एक स्कीमा परिवर्तन एक बहुत भारी ऑपरेशन होगा? क्या फेरबदल की समस्या को केवल वर्चुअल पॉइंटर्स को स्टोर करके नहीं देखा जा सकता है, जो लुकअप टेबल के माध्यम से होता है? यह अभी भी O (1) में सही प्रदर्शन करेगा?
Lodewijk बोगार्ड्स

मैं ग्राफ़ डेटाबेस की एक परिभाषा के तहत काम कर रहा हूं जिसमें पूर्व-संबंधपरक डेटाबेस जैसे कि पदानुक्रमित या नेटवर्क वाले शामिल होंगे। इन डेटाबेसों में से कुछ में स्कीमा थे, भले ही रिलेशनल स्कीमा नहीं थे। मुझे यकीन नहीं है कि मेरी परिचालन परिभाषा मानक परिभाषा से सहमत है या नहीं।
वाल्टर मिती

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

7

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

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

कुछ स्थितियों में डेटा मॉडल को ग्राफ डेटाबेस में बदलना आसान है, क्योंकि यह आरडीबीएमएस में है, उदाहरण के लिए आरडीबीएमएस में यदि मैं 1: n से m तक तालिका संबंध बदलता हूं: n मुझे संभावित डाउनटाइम के साथ DDL लागू करना होगा।

RDBMS के अन्य क्षेत्रों में लाभ हैं, जैसे डेटा एकत्र करना या डेटा पर टाइमस्टैम्प्ड संस्करण नियंत्रण करना।

मैं डेटा वेयरहाउसिंग के लिए ग्राफ़ डेटाबेस पर अपने ब्लॉग पोस्ट में कुछ अन्य पेशेवरों और विपक्षों के बारे में चर्चा करता हूं


4

जबकि संबंधपरक मॉडल आसानी से एक ग्राफ मॉडल में निहित डेटा का प्रतिनिधित्व कर सकता है, हम व्यवहार में दो महत्वपूर्ण समस्याओं का सामना करते हैं:

  1. SQL आसानी से ग्राफ ट्रैवर्सल, विशेष रूप से ट्रैवर्सल्स जहां गहराई अज्ञात या अनबाउंड है, को आसानी से करने के लिए सिंटैक्स का अभाव है। उदाहरण के लिए, अपने दोस्तों के दोस्तों को निर्धारित करने के लिए SQL का उपयोग करना काफी आसान है, लेकिन "अलगाव की डिग्री" समस्या को हल करना कठिन है।
  2. जैसे ही हम ग्राफ को आगे बढ़ाते हैं, प्रदर्शन जल्दी खराब हो जाता है। ट्रैवर्सल का प्रत्येक स्तर क्वेरी प्रतिक्रिया समय में महत्वपूर्ण रूप से जोड़ता है।

संदर्भ: अगली पीढ़ी के डेटाबेस


0

ग्राफ़ डेटाबेस उन उपयोग के मामलों की जाँच करने के लायक है जिन्हें वे एक्सेल करते हैं, लेकिन मेरे पास कुछ कारण हैं जो उपरोक्त प्रतिक्रियाओं में कुछ दावे पर सवाल उठाते हैं। विशेष रूप से:

भारी संख्या में रिकॉर्ड (dan1111 की पहली बुलेट बिंदु) पर काम करते समय एक संबंधपरक डेटाबेस बहुत तेज़ होता है

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

दूसरे शब्दों में हमारे प्रश्नों और रिश्तों को जितना अधिक जटिल किया जाता है, उतना ही अधिक हमें एक ग्राफ बनाम एक संबंधपरक डेटाबेस से लाभ मिलता है। (उली बेथके दूसरे पैराग्राफ)

हालांकि इन सिद्धांतों में अच्छी तरह से योग्यता हो सकती है, फिर भी मुझे उनके साथ संरेखित करने के लिए अपने विशिष्ट उपयोग के मामले को प्राप्त करने का एक तरीका खोजना है। संदर्भ: ग्राफ़ डेटाबेस या रिलेशनल डेटाबेस कॉमन टेबल एक्सटेंशन्स: एसाइक्लिक ग्राफ क्वेरी प्रदर्शन की तुलना करना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.