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