ग्राफ़-आधारित डेटाबेस (http://neo4j.org/) के उपयोग के मामले क्या हैं? [बन्द है]


129

मैंने रिलेशनल डीबी का बहुत उपयोग किया है और उपलब्ध अन्य प्रकारों पर उद्यम करने का निर्णय लिया है।

यह विशेष उत्पाद अच्छा और आशाजनक लगता है: http://neo4j.org/

क्या किसी ने ग्राफ-आधारित डेटाबेस का उपयोग किया है? एक उपयोगिता से पेशेवरों और विपक्ष क्या हैं?

क्या आपने इनका उत्पादन वातावरण में उपयोग किया है? क्या आवश्यकता थी जिसने आपको उनका उपयोग करने के लिए प्रेरित किया?


Neo4j का आज अंतर्राष्ट्रीय कंपनियों में अलग-अलग उपयोग है। नियो टेक्नोलॉजी के कई सफेद कागज हैं, जिनमें से प्रत्येक का विश्लेषण किया गया है: 1. धोखाधड़ी का पता लगाना 2. वास्तविक समय की सिफारिशें और सामाजिक नेटवर्क 3. डेटा केंद्र प्रबंधन अधिक जानकारी: bbvaopen4u.com/en/actualidad/…
चिराग मालीवाल

जवाबों:


187

मैंने पिछली नौकरी में एक ग्राफ डेटाबेस का उपयोग किया था। हम neo4j का उपयोग नहीं कर रहे थे, यह एक घर में बर्कले डीबी के शीर्ष पर बनाई गई चीज थी, लेकिन यह समान थी। इसका उपयोग उत्पादन में किया गया था (यह अभी भी है)।

एक ग्राफ़ डेटाबेस का उपयोग करने का कारण यह था कि डेटा सिस्टम द्वारा संग्रहीत किया जा रहा था और सिस्टम जो डेटा के साथ काम कर रहा था वह वास्तव में रिलेशनल डेटाबेस का कमजोर स्थान था और ग्राफ़ डेटाबेस का बिल्कुल मजबूत स्थान था। सिस्टम को उन वस्तुओं के संग्रह को संग्रहीत करने की आवश्यकता है जो एक निश्चित स्कीमा की कमी रखते हैं और रिश्तों द्वारा एक साथ जुड़े हुए हैं। डेटा के बारे में बताने के लिए, सिस्टम को बहुत सारे ऑपरेशन करने की आवश्यकता होती है जो एक ग्राफ़ डेटाबेस में कुछ ट्रैवर्सल्स होंगे, लेकिन SQL में यह काफी जटिल प्रश्न होंगे।

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

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

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

हमारे ग्राफ डेटाबेस का अन्य नुकसान यह था कि हमने इसे स्वयं बनाया था, जिसका मतलब था कि जब हम किसी समस्या (आमतौर पर स्केलेबिलिटी के साथ) से टकराते हैं, तो हमें इसे स्वयं हल करना होगा। यदि हम एक संबंधपरक डेटाबेस का उपयोग करते हैं, तो विक्रेता ने दस साल पहले ही समस्या का समाधान कर लिया होगा।

यदि आप enterprisey ग्राहकों के लिए एक उत्पाद का निर्माण कर रहे हैं और आपका डेटा रिलेशनल मॉडल में फिट बैठता है, तो यदि आप कर सकते हैं तो एक रिलेशनल डेटाबेस का उपयोग करें। यदि आपका एप्लिकेशन रिलेशनल मॉडल में फिट नहीं होता है, लेकिन यह ग्राफ मॉडल को फिट करता है, तो ग्राफ डेटाबेस का उपयोग करें। यदि यह केवल कुछ और फिट बैठता है, तो इसका उपयोग करें।

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

जब भी आपने चुना, तब तक डेटाबेस इंजन का निर्माण न करने का प्रयास करें जब तक आप वास्तव में डेटाबेस इंजन का निर्माण करना पसंद न करें।


66
शानदार उत्तर, और +1 के लिए "डेटाबेस इंजन को स्वयं बनाने की कोशिश न करें जब तक कि आप वास्तव में डेटाबेस इंजन का निर्माण नहीं करते हैं",
सड़ांध

32

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

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

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

यह कहा जा रहा है, हम MySQL में कुछ जानकारी केवल इसलिए स्टोर करते हैं क्योंकि बिजनेस साइड के लिए क्विक एसक्यूएल क्वेरियों को चलाना आसान है। नियो के साथ समान कार्य करने के लिए हमें कोड लिखने की आवश्यकता होगी जो अभी हमारे पास अभी बैंडविड्थ नहीं है। हालांकि जैसे ही हम करते हैं, मैं वह सारा डेटा नियो के पास ले जा रहा हूं!

सौभाग्य।


1
क्या आप मुझे बता सकते हैं कि आप MySQL में किस तरह की जानकारी संग्रहीत करते हैं? मैं एक नया समुदाय बनाने जा रहा हूं, क्या मैं यूजरनेम, पासवर्ड, फर्स्ट एंड लास्टनाम और इत्यादि सभी "रेगुलर" जानकारी स्टोर कर सकता हूं और क्या यह neo4j में है या यह वास्तव में इसके लिए उपयुक्त नहीं है? : ओ
मुकितो २३'१३

3
आप नियो में उस जानकारी को पूरी तरह से स्टोर कर सकते हैं। मैंने कुछ प्रणालियों का निर्माण किया है जहाँ खाता जानकारी सभी ग्राफ में है। ग्राफ़ के बाहर मैं आमतौर पर जिस तरह की जानकारी संग्रहीत करता हूं, वह समय श्रृंखला डेटा की बड़ी मात्रा होती है, जिसे रिपोर्टिंग के लिए क्वेर करने की आवश्यकता होती है।
डेटारोट

1
यदि आप .Net / Microsoft स्टैक के भीतर काम कर रहे हैं, तो Neo4jCLient अच्छा काम करता है।
मैनुअल हर्नांडेज़

23

दो बिंदु:

सबसे पहले, मैं SQL सर्वर में पिछले 5 वर्षों से काम कर रहे डेटा पर, मैंने हाल ही में SQL के साथ स्केलेबिलिटी दीवार को मारा है, जिस प्रकार के प्रश्नों के लिए हमें (नेस्टेड रिश्ता) चलाने की जरूरत है ... आप जानते हैं ... रेखांकन )। जब मैं इस तरह के लुकअप की आवश्यकता होती है, तो मैं neo4j के साथ खेलता रहता हूं, और मेरे लुकअप समय की तीव्रता के कई आदेश हैं।

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

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

वाक्यांश को सिक्का देने के लिए, सिल्वर बुलेट नहीं है। यह कहने के लिए बहुत कम देखा गया कि ग्राफ डेटाबेस मॉडल पुराने हैं और एक का उपयोग करने के लिए 40 साल की प्रगति है। यह कहते हुए कि C का उपयोग हम जावा और C # जैसी चीजों को प्राप्त करने के लिए की गई सभी तकनीकी प्रगति को छोड़ रहे हैं। हालांकि यह सच नहीं है। C एक उपकरण है जिसकी कुछ कार्यों के लिए आवश्यकता होती है। और जावा अन्य कार्यों के लिए एक उपकरण है।


15

मैं इंजीनियरिंग डेटा का प्रबंधन करने के लिए वर्षों से MySQL का उपयोग कर रहा हूं, और यह अच्छी तरह से काम करता है, लेकिन हमारे पास एक समस्या थी (लेकिन हमें पता नहीं था) कि हमें हमेशा स्कीमा-अप की योजना बनानी थी। एक और समस्या जो हमें पता थी कि हम डेटा को डोमेन ऑब्जेक्ट्स और बैक तक मैप कर रहे थे।

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

और चूंकि कोड में ऑब्जेक्ट मॉडल आमतौर पर एक ग्राफ संरचना है, डेटाबेस से मैपिंग भी सरल है, कम कोड के साथ और परिणामस्वरूप कम बग।

और एक अतिरिक्त बोनस के रूप में, हमारे डेटा को neo4j में लोड करने के लिए हमारा प्रारंभिक प्रोटोटाइप कोड वास्तव में पिछले MySQL संस्करण की तुलना में तेजी से प्रदर्शन कर रहा है। मेरे पास इस (अभी तक) पर कोई ठोस संख्या नहीं है, लेकिन यह एक अच्छी अतिरिक्त सुविधा थी।

लेकिन दिन के अंत में, विकल्प संभवतः आपके डोमेन मॉडल की प्रकृति पर आधारित होना चाहिए। क्या यह टेबल या ग्राफ के लिए बेहतर है? कुछ प्रोटोटाइप करके निर्णय लें, डेटा लोड करें और इसके साथ खेलें। डेटा के विभिन्न विचारों को देखने के लिए नियोक्लिप्स का उपयोग करें। एक बार जब आप ऐसा कर लेते हैं, तो उम्मीद है कि आपको पता चल जाएगा कि आप किसी अच्छी चीज पर हैं या नहीं।


1
अब तक मुझे ग्राफिक डीबी का उपयोग करने की कोई व्यावसायिक आवश्यकता नहीं है। यह हो सकता है क्योंकि मुझे नहीं लगता कि आरडीबीएमएस के अलावा कोई भी चीज है। यह संभव हो सकता है कि ज्यादातर समय मैं परिपत्र छेद में स्क्वायर खूंटी की कोशिश कर रहा हूं। ग्राफ़ आधारित डीबी मेरे लिए पूरी तरह से एक नया संकेत है। मैंने सीनग्राफ आधारित दृढ़ता फ्रेमवर्क (Java3D, Xith3D) का उपयोग किया है, लेकिन यह ग्राफिक्स आधारित एप्लीकेशन को स्टोर करना था। यह पूरी बातचीत मुझे एक नया संकेत दे रही है। किसी भी अनुप्रयोग refrence जो ग्राफ आधारित Db का उपयोग कर रहा है कि मैं कार्रवाई में चीजें देख सकता हूं!
खंगरोठ

4

मैं अपनी कंपनी में एक इंट्रानेट का निर्माण कर रहा हूं।

मुझे यह समझने में दिलचस्पी है कि टेबल (Oracle, MySQL, SQL Server, Excel, Access, विभिन्न यादृच्छिक सूचियों) में संग्रहीत डेटा को कैसे लोड करना है और इसे Neo4J, या कुछ अन्य ग्राफ़ डेटाबेस में लोड करना है। विशेष रूप से, क्या होता है जब आम डेटा सिस्टम में पहले से मौजूद डेटा को ओवरलैप करता है।

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

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

तो समस्याओं में से एक इन सभी नोटों को एक साथ एक "दृश्य" में विलय कर रहा है ताकि कोई उन सभी मुद्दों को देख सके जिन्हें किसी विशेष भाग में संबोधित करने की आवश्यकता है।

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

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

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

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


@ पाओल बोक: मुझे लगता है कि यह इस तरह की समस्या को हल करने के लिए एक अच्छा फिट होगा जो कि neo4j का उपयोग कर रहा है। यदि आप मेलिंग सूची में शामिल होते हैं, तो मुझे यकीन है कि आप समुदाय से बहुत अधिक इनपुट प्राप्त कर सकते हैं: neo4j.org/community/list
nawroth

2
मैं यह नहीं देखता कि यह एक रिलेशनल डेटाबेस में कैसे नहीं किया जा सकता है। क्या मैं कुछ भूल रहा हूँ?
एंड्रयू हैरी

5
मुझे नहीं लगता कि 'NoSQL' के बारे में कोई भी चर्चा इस बात पर केंद्रित है कि जब तक इसे शामिल नहीं किया जाता है तब तक संबंधपरक डेटाबेस के साथ क्या नहीं किया जा सकता है। मुझे लगता है कि यह अक्सर होता है (कम से कम मेरे लिए) यह स्वाभाविक है कि समाधान कितना स्वाभाविक है, आपकी समस्याओं को हल करने में यह कितना कुशल है, आदि
इल्को

4

यहां एक अच्छा लेख है जो उन आवश्यकताओं के बारे में बात करता है जो गैर-संबंधपरक डेटाबेस भरते हैं: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

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


3

थोड़ी देर हो सकती है, लेकिन Neo4j का उपयोग करने वाली परियोजनाओं की संख्या बढ़ रही है, जो Neo4j में सूचीबद्ध बेहतर ज्ञात हैं । इसके अलावा NeoTechnology, Neo4j के पीछे की कंपनी, उनके ग्राहकों के पेज पर कुछ संदर्भ हैं

नोट: मैं Neo4j टीम का हिस्सा हूं

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