सबसे पहले, आप अपने आप से पूछना चाहिए: एक शीर्ष/नोड के प्रकार अनुक्रमित करने की आवश्यकता है? आईई। क्या आपको उनके प्रकार से चरम/नोड्स को पुनर्प्राप्त करने की आवश्यकता है, मान लीजिए, ग्राफ से सभी 'उपयोगकर्ता' कोष्ठक पुनर्प्राप्त करें या आपको किसी दिए गए प्रकार के सभी शीर्षकों को पुनर्प्राप्त करके प्रारंभ करने वाले प्रश्नों का उत्तर देने की आवश्यकता है और फिर उनको फ़िल्टर/संसाधित करें?
यदि इस प्रश्न का उत्तर हाँ है, तो मेरा सुझाव है कि आप प्रकार को एक स्ट्रिंग प्रॉपर्टी के रूप में संग्रहीत करें जो अनुक्रमित है। या, यदि आप किसी जेवीएम आधारित भाषा में विकास कर रहे हैं, तो आप एक प्रकार की enum परिभाषित कर सकते हैं और उस प्रकार का उपयोग कर सकते हैं क्योंकि अधिक प्रकार की सुरक्षा और स्वचालित त्रुटि जांच के लिए संपत्ति प्रकार। टाइटन मनमानी उपयोगकर्ता परिभाषित कक्षाओं/enums संपत्ति प्रकार के रूप में समर्थन करता है और कम स्मृति पदचिह्न के लिए उन लोगों को संपीड़ित करेगा।
हालांकि, इस दृष्टिकोण का नकारात्मक पक्ष यह है कि यह स्केल नहीं करेगा क्योंकि आप कम चयनशीलता सूचकांक बना रहे हैं। इसका अर्थ यह है कि 'उपयोगकर्ता' या 'उत्पाद' प्रकार के बहुत से शिखर होने की संभावना है और उन सभी को क्रमशः 'उपयोगकर्ता' या 'उत्पाद' के लिए इंडेक्स प्रविष्टि से जोड़ा जाना चाहिए। यह इस सूचकांक को बनाए रखने और पूछताछ को बहुत महंगा और स्केल करने में कठोर बनाता है (कल्पना करें कि फेसबुक के पास 'टाइप' इंडेक्स था: 'फोटो' एंट्री के तहत अरबों शिखर होंगे)। यदि आप स्केलिंग से संबंधित नहीं हैं (फिर भी), तो यह काम कर सकता है।
यदि प्रश्न का उत्तर कोई है, तो मैं ग्राफ में चरम/नोड्स के रूप में मॉडल प्रकारों का सुझाव देता हूं। अर्थात। एक 'उपयोगकर्ता' वर्टेक्स और 'उत्पाद' वर्टेक्स और प्रत्येक उपयोगकर्ता से 'उपयोगकर्ता' वर्टेक्स, '0' लेबल वाले किनारे
इस दृष्टिकोण का लाभ यह है कि आप अपने डेटा को मॉडल करने के लिए ग्राफ़ का उपयोग करते हैं आपके डेटाबेस के बाहर स्ट्रिंग मान रखने के बजाय महत्वपूर्ण प्रकार की जानकारी का प्रतिनिधित्व करते हैं। जैसे ही आप अपना आवेदन बनाते हैं, ग्राफ डेटाबेस इसका केंद्रीय घटक बन जाएगा और लंबे समय तक टिकेगा। चूंकि प्रोग्रामिंग भाषाएं और डेवलपर आते हैं और जाते हैं, आप डेटा मॉडलिंग और टाइप जानकारी को उनके साथ जाने के लिए नहीं चाहते हैं और इस सवाल का सामना कर रहे हैं: "SPECIAL_USER का क्या अर्थ है?" इसके बजाय, एक विशेष_यूएसईआर वर्टेक्स है और इसके लिए उद्भव जानकारी जोड़ें, यानी, इस प्रकार किसने बनाया, यह क्या दर्शाता है और एक संक्षिप्त विवरण - डेटाबेस में सभी।
इस दृष्टिकोण के साथ एक समस्या यह है कि 'उपयोगकर्ता' और 'उत्पाद' शिखर पर आपके आवेदन स्केल के रूप में बहुत से किनारों की घटना होगी। दूसरे शब्दों में, आप सुपरनोड बना रहे हैं जो स्केलिंग मुद्दों को बनाते हैं। यही कारण है कि टाइटन ने एक unidirectional किनारे की अवधारणा पेश की। एक यूनिडायरेक्शनल एज वेब पर एक लिंक की तरह है: प्रारंभिक वर्टेक्स एक और कशेरुका को इंगित करता है, लेकिन वह कशेरुक किनारे से अनजान है। चूंकि आप 'उपयोगकर्ता' वर्टेक्स से सभी उपयोगकर्ता शीर्षकों तक नहीं जाना चाहते हैं, इसलिए आप स्केलेबिलिटी और प्रदर्शन में कुछ भी खोना नहीं चाहते हैं।
स्रोत
2012-11-19 21:59:43
तो संक्षेप में, अनुक्रमित संपत्ति का उपयोग करके स्केलेबिलिटी के खर्च पर सभी नोड्स-ऑफ-ए-टाइप के साथ आसानी से काम करने की अनुमति मिलती है, जबकि इंडेक्स नोड्स का उपयोग करते समय स्केलेबिलिटी के खर्च पर एक अधिक प्राकृतिक (यानी संरचनात्मक) प्रतिनिधित्व होता है । क्या एक तरीका या दूसरा काफी हद तक सीमित करता है कि ग्राफ का उपयोग कैसे किया जा सकता है? – cdeszaq
मुझे यकीन नहीं है कि मैं आपका अनुसरण कर रहा हूं। यदि कोई दूसरा समाधान का उपयोग करने के लिए आपकी सिफारिश का पालन करता है (इस प्रकार प्रकार निर्दिष्ट करने के लिए किनारे का उपयोग), तो वह उपयोगकर्ताओं की सूची कैसे ढूंढता है? क्योंकि वह उपयोगकर्ता कशेरुक से उपयोगकर्ताओं की सूची में नहीं जा सकता ... –
महान उत्तर माथीस के लिए धन्यवाद। लेकिन क्या आप 'उपयोगकर्ता' नोड को यूनिडायरेक्शनल किनारों के बारे में कुछ और बात नहीं कर सकते? प्रत्येक दिशा में पूछताछ के संदर्भ में इसका क्या प्रभाव होगा? (मैं अनुमान लगा रहा हूं, और बड़ा प्रभाव नहीं, जब तक आप किनारे पर इंडेक्स गुण जोड़ते हैं)।और कैसंद्रा के साथ, यूनिडायरेक्शनल किनारों के साथ, आप उदाहरण के लिए <10 के लाखों नोड्स 'उपयोगकर्ता' प्रकार तक सीमित हैं। –