Mongodb में एक ग्राफ भंडारण




graph database (4)

मेरे पास एक अप्रत्यक्ष ग्राफ है जहां प्रत्येक नोड में एक सरणी होती है। डेटा सरणी से जोड़ा / हटाया जा सकता है। Mongodb में इसे स्टोर करने का सबसे अच्छा तरीका क्या है और इस क्वेरी को प्रभावी ढंग से करने में सक्षम हो: नोड ए दिया गया, ए के आसन्न नोड्स में निहित सभी डेटा का चयन करें।

डीबी के संबंध में, आप प्रत्येक नोड में डेटा संग्रहीत करने के लिए किनारों और दूसरी तालिका का प्रतिनिधित्व करने वाली तालिका बना सकते हैं।

table 1 
NodeA, NodeB
NodeA, NodeC

table 2 
NodeA, item1
NodeA, item2
NodeB, item3 

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

https://code.i-harness.com


विशिष्ट वितरित ग्राफ डेटाबेस

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

यहां 7 ऐसी पेशकशों की तुलना की गई है: https://docs.google.com/spreadsheet/ccc?key=0AlHPKx74VyC5dERyMHlLQ2lMY3dFQS1JRExYQUNhdVE#gid=0

तीन सबसे महत्वपूर्ण ओपन सोर्स प्रसाद (टाइटन, ओरिएंट डीबी, और नियो 4 जे) में से, उनमें से सभी टिंकरपॉप ब्लूप्रिंट इंटरफ़ेस का समर्थन करते हैं। तो ऐसे ग्राफ के लिए जो इस तरह दिखता है ...

... "सभी लोगों के लिए एक सवाल है कि जूनो बहुत प्रशंसा करता है कि वह वर्ष 2011 से कौन जानता है" इस तरह दिखेगी:

Iterable<Vertex> results = juno.query().labels("knows").has("since",2011).has("stars",5).vertices()

यह, ज़ाहिर है, सिर्फ हिमशैल की नोक है। बहुत शक्तिशाली सामान!

यदि आपको मोंगो के साथ रहना है

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


MongoDB एक लचीला पेड़ पदानुक्रम का उपयोग कर एक ग्राफ अनुकरण कर सकते हैं। आप सख्त ग्राफिंग आवश्यकताओं के लिए neo4j पर विचार करना चाह सकते हैं।


मैं मोंगो उठा रहा हूं, इस प्रकार की स्कीमा को भी देख रहा हूं (अप्रत्यक्ष ग्राफ, पड़ोसियों से जानकारी के लिए पूछताछ) मुझे लगता है कि जिस तरह से मैं अब तक पक्ष करता हूं वह इस तरह दिखता है:

प्रत्येक नोड में पड़ोसी कुंजी की एक सरणी होती है, जैसे।

{
 nodeIndex: 4
 myData: "data"
 neighbors: [8,15,16,23,42]
}

पड़ोसियों से डेटा खोजने के लिए, "ऑपरेटर" में $ का उपयोग करें:

db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}});

प्रासंगिक डेटा में परिणामों को सीमित करने के लिए आप फील्ड चयन का उपयोग कर सकते हैं।

db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}}, {myData:1});

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

अधिक जानकारी के लिए उन लिंक को जांचें:





database