2015-05-11 8 views
34

मुझे पता है कि स्टैक ओवरफ्लो पर आसपास के समान प्रश्न हैं लेकिन मुझे नहीं लगता कि वे निम्नलिखित का जवाब देते हैं। ज्यादातर इस स्कीमा निम्नलिखित मेरी समझ दुकान आंकड़ों केग्राफ डेटाबेस बनाम ट्रिपल स्टोर - कब उपयोग करें?

ग्राफ़ डेटाबेस:

Table/Collection 1: store nodes with UID 
Table/Collection 2: store relations referencing nodes via UID 

यह रेखांकन की मनमानी प्रकार के भंडारण की अनुमति देता है। अब के रूप में मैं ट्रिपल भंडार को समझने की दुकान के अलावा कुछ नहीं ट्रिपल:

  • ग्राफ़ डेटाबेस:

    Triple/Collection 1: store triples (2 nodes, 1 relation) 
    

    अब मैं उपयोग के मामलों के बारे में निम्नलिखित भेद देखना होगा जब आप जानते हैं, स्थिर कनेक्शन

  • ट्रिपल स्टोर : जब आपके पास कम से कम जुड़े नोड्स होते हैं और अक्सर नए कनेक्शन की तलाश में होते हैं

मैं इस तथ्य से उलझन में हूं कि लोग डिस्कस नहीं लग रहे हैं इन मानदंडों के अनुसार किस का उपयोग करना है। मुझे लगता है कि अधिकांश लेख गति या संगतता जैसे तर्कों के बारे में बात कर रहे हैं। लेकिन क्या यह सबसे प्रासंगिक बिंदु नहीं है?

इसका उल्टा रखो:

  • एक स्पष्ट रूप से जुड़ा हुआ है, उपयोगकर्ता परिभाषित ग्राफ होने की कल्पना करें। पृथ्वी पर क्यों आप इसे केवल ट्रिपल के रूप में स्टोर करना चाहते हैं, कनेक्शन के बारे में सारी जानकारी खोना? या ट्रिपल subject में आईडी को संग्रहीत करने के कुछ कस्टम समाधान को लागू करना है।
  • कल्पना करें कि आप स्पष्ट रूप से एकत्र नोड्स प्राप्त कर रहे हैं जिन्हें आप SPARQL का उपयोग करके अज्ञात संबंधों के लिए पूछना चाहते हैं। ग्राफ डेटाबेस उस का समर्थन करते हैं। लेकिन इसके लिए उन्हें एक और इंडेक्स बनाना है जो मुझे लगता है और धीमा हो जाएगा?

संपादित करें: मुझे लगता है कि "कनेक्शन के बारे में जानकारी खोना" यह गलत तरीका है। यदि आप स्वीकार किए गए उत्तर में दिखाए गए हैं और 2 नोड्स + 1 संबंध के लिए कई ट्रिपल डालें तो आप सभी जानकारी और विशेष रूप से जानकारी को सटीक नोड्स से कनेक्ट करते हैं।

+3

"ट्रिपल स्टोर कुछ भी नहीं बल्कि ट्रिपल स्टोर करते हैं" कई (अधिकांश?) ट्रिपल स्टोर्स (यानी, आरडीएफ के लिए) वास्तव में * क्वाड * स्टोर्स हैं, क्योंकि उनके पास * नामित ग्राफ * की एक अवधारणा (SPARQL डेटासेट्स से) है। चूंकि प्रत्येक ट्रिपल ग्राफ के भीतर मौजूद होता है, इसलिए मौलिक वस्तु वास्तव में ** (ग्राफ, विषय, भविष्यवाणी, वस्तु) ** है। –

+0

"ट्रिपल/संग्रह 1: स्टोर ट्रिपल (2 नोड्स, 1 रिलेशनशिप)" हालांकि ऑर्डर महत्वपूर्ण है। यह एक अप्रत्यक्ष किनारा नहीं है, इसलिए यह वास्तव में ** (स्रोत, रिश्ते, लक्ष्य) ** है, या, आमतौर पर, ** (विषय, predicate (या संपत्ति), वस्तु) **। –

+0

"पृथ्वी पर क्यों आप इसे केवल ट्रिपल के रूप में स्टोर करना चाहते हैं, [एसआईसी] कनेक्शन के बारे में सारी जानकारी खोना?" मुझे यकीन नहीं है कि आपका मतलब क्या है।संपत्ति को यूआरआई/आईआरआई द्वारा पहचाना जाता है, जो यूआईडी के रूप में सार्वभौमिक है, सिवाय इसके कि यह कुछ ऐसा याद रखना आसान हो सकता है, जो भरोसेमंद हो सकता है (ताकि आप इसके बारे में अधिक जानकारी प्राप्त कर सकें), और विषय और वस्तु आमतौर पर यूआरआई या डेटा अक्षर हैं। कनेक्शन के बारे में क्या जानकारी खो गई है? –

उत्तर

51

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

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

मान लें कि मेरे पास "बॉब" नामक व्यक्ति है जो "सुसान" जानता है।RDF में, यह कुछ इस तरह होगा:

(a:Person {name: "Bob"})-[:KNOWS]->(b:Person {name: "Susan"}) 

सूचना है कि RDF में, यह 3 रिश्तों है, लेकिन उन रिश्तों का केवल एक:

<http://example.org/person/1> :hasName "Bob". 
<http://example.org/person/1> foaf:knows <http://example.org/person/2>. 
<http://example.org/person/2> :hasName "Susan". 

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

आरडीएफ और ट्रिपल स्टोर ज्यादातर आर्किटेक्चरल चुनौतियों के लिए बनाए जाते हैं जो आप अर्थात् वेब के साथ भागेंगे। उदाहरण के लिए, आर्किटेक्चरल धारणा पर एक्सएमएल नेमस्पेसिंग का निर्माण किया गया है कि आप कई अलग-अलग शब्दावली और नामस्थानों के उपयोग से मिश्रण और मिलान करेंगे। (यह सही है कि एक बहुत ही "अर्थपूर्ण वेब" धारणा है)। तो SPARQL और RDF में आप आमतौर पर कम से कमxsd, rdf, और rdfs नामस्थानों के साथ-साथ owl, skos, और कई अन्य लोगों का उपयोग देखेंगे। एसपीएआरक्यूएल और आरडीएफ/आरडीएफएस में कई हुक और फीचर्स भी हैं जो ऑटोलॉजी अनुमान जैसी चीजों को आसान बनाने के लिए स्पष्ट रूप से हैं। आप यूआरआई के साथ चीजों की पहचान "अपने पहचानकर्ताओं को नाम देने" के तरीके के रूप में पहचानने के लिए करेंगे, लेकिन यह भी कि कुछ लोग यूआरआई को डी-रेफरेंस करना चाहते हैं ... फिर भी यह धारणा कई पार्टियों के बीच व्यापक डेटा साझाकरण व्यवस्था है। इसके विपरीत द्वारा

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

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

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

+1

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

+3

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

+2

@TomaszPluskiewicz neo4j वजन किसी भी तरह से नहीं बनाया गया है; हालांकि आप उन्हें मॉडल करना चुन सकते हैं। आरडीएफ के साथ एक ही स्थिति। नियो 4 जे ने विशेष रूप से किनारों (कोई अप्रत्यक्ष किनारों) को निर्देशित नहीं किया है, हालांकि आप उन्हें पार करने के लिए चुन सकते हैं जैसे कि वे अप्रत्यक्ष हैं। आरडीएफ के साथ एक ही स्थिति। – FrobberOfBits

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