2012-05-25 11 views
12

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

उदाहरण सवाल (उत्पन्न होने वाली कई सवाल का):

  • यह एक अच्छा विचार है, तो उच्च-नोड उपयोगकर्ता बनाने के लिए, ("मौजूद") डेटाबेस में किसी भी उपयोगकर्ता-नोड पर होने रिश्ते?
  • क्या संस्करण प्रबंधन में निर्माण करना एक अच्छा विचार है (यानी रिश्तों को बनाते हैं (जैसे "अनुसरण") कुछ) दस्तावेज़/पोस्ट के अद्यतन संस्करणों को इंगित करते हुए इस रिश्ते को वापस जाने का मतलब है कि दस्तावेज के माध्यम से किए गए परिवर्तनों को देखना ।
  • आदि ...

तो, हम एक ग्राफ़ डाटाबेस डिजाइन कुकबुक की ज़रूरत है?

उत्तर

5

Gremlin उपयोगकर्ता समूह (http://tinkerpop.com/) और Neo4j उपयोगकर्ता समूह (https://groups.google.com/forum/?fromgroups#!forum/neo4j) ग्राफ़-डेटाबेस मॉडलिंग पर चर्चा करने के लिए अच्छी जगहें हैं।

आप "उपयोगकर्ता" जैसे सुपरनोड बना सकते हैं, लेकिन यह इंडेक्स का उपयोग करने के लिए बेहतर और अधिक प्रदर्शनकारी हो सकता है और प्रत्येक उपयोगकर्ता के लिए एक कुंजी = element_type, value = "user", id = user_node_id के साथ इंडेक्स एंट्री बना सकता है।

एक "निम्न" संबंध अक्सर फेसबुक और ट्विटर जैसे लोगों/दोस्तों के लिए उपयोग किया जाता है, इसलिए मैं इसे संस्करण के लिए उपयोग नहीं करता। आप Neo4j में एक वर्जनिंग सिस्टम बना सकते हैं जो प्रत्येक प्रविष्टि टाइमस्टैम्प का उपयोग करता है और आखिरी-लिखने वाली जीत एल्गोरिदम का उपयोग करता है, और इसमें अन्य डाटाबेस सिस्टम हैं जैसे डाटामैक ने इसे बनाया है।

उदाहरण ब्लॉग के लिए लाइटबुल के मॉडल (https://github.com/espeed/lightbulb/blob/master/lightbulb/model.py) देखें बल्ब/पायथन में मॉडल (http://bulbflow.com)।

संबंधित मुद्दे