2013-03-18 9 views
7

मेरे पास एक नोड प्रकार है जिसमें एक स्ट्रिंग प्रॉपर्टी है जो वास्तव में वही मान रखती है। इत्यादि लाखों नोड्स उस स्ट्रिंग मान के केवल 5 विकल्पों के साथ। मैं उस संपत्ति से खोज करूँगा।नियो 4 जे डिज़ाइन: संपत्ति बनाम "नोड और रिलेशनशिप"

मेरा प्रश्न प्रदर्शन और स्मृति के संदर्भ में बेहतर होगा: ए) इसे नोड संपत्ति के रूप में कार्यान्वित करें और बहुत सारे डुप्लिकेट (और WHERE का उपयोग करके खोजें)। बी) इसे 5 अतिरिक्त नोड्स के रूप में कार्यान्वित करें, जहां सभी मूल नोड्स उनमें से एक को संदर्भित करते हैं (और अतिरिक्त MATCH का उपयोग करके खोजें)।

उत्तर

6

अधिक जानकारी के बिना एक सामान्य उद्देश्य जवाब देना मुश्किल है।

एक प्रदर्शन परिप्रेक्ष्य से जितनी जल्दी हो सके खोज को सीमित करना बेहतर है। यदि आपको किसी ट्रैवर्सल के लिए गुणों को देखना नहीं है तो भी अधिक फायदेमंद।

यह देखते हुए कि मुझे लगता है कि लुकअप प्रॉपर्टी को एक अलग नोड में स्थानांतरित करना और रिलेशनशिप प्रकार के रूप में मूल्य का उपयोग करना बेहतर है।

+0

मैं वास्तव में अपने विचार संबंध प्रकार के रूप में मूल्य का उपयोग करना चाहते: इस ब्लॉग पोस्ट इस नए Neo4j 2.0 सुविधा के लिए एक अच्छा परिचय है। तो मुझे इन नए रिश्तों के साथ इंगित करने के लिए कोई डेटा नहीं होने के साथ केवल 1 बेकार नोड की आवश्यकता है। एक और सवाल यह होगा: क्या एक एकल नोड के साथ 1 मिलियन रिश्तों के साथ कोई प्रदर्शन समस्या होगी? मैं उस नोड से केवल कोई खोज नहीं करूँगा, केवल इसके लिए। इसके अलावा, क्या इसके लिए रूट नोड का उपयोग करना समझ में आता है? – Martynas

+2

जब तक आप केवल उस नोड पर जाते हैं वहां कोई प्रदर्शन जुर्माना नहीं होता है। यदि आप दूसरी दिशा में जाते हैं, तो आपको पाठ्यक्रम के 1 मिलियन रिश्तों को स्कैन करना होगा। –

+0

मैं रूट नोड का उपयोग करने की अनुशंसा नहीं करता।शायद इसके लिए रूट नोड से जुड़ा एक नया नोड बनाएं। अन्यथा आप रूट नोड को कई अलग-अलग अवधारणाओं के साथ पॉप्युलेट कर सकते हैं जो मेरी राय में खराब मॉडलिंग रणनीति है। –

1

मैंने इस समस्या को थोड़ा सा भी सोचा है। मेरे मामले में, मैं प्रतिनिधित्व करने के लिए राज्य था:

  • शुरू
  • IN_PROGRESS
  • प्रस्तुत
  • पूरा

कुल मिलाकर नोड + रिश्ता दृष्टिकोण है कि केवल एक ही रिश्ते में और अधिक आकर्षक लग रहा है संदर्भ को स्ट्रिंग स्ट्रिंग की बजाय हर बार बनाए रखने की आवश्यकता होती है और आपको अतिरिक्त अतिरिक्त इंडेक्स स्कैन करने की आवश्यकता नहीं होती है जिसे संपत्ति पर बनाए रखा जाना चाहिए (स्मृति और प्रदर्शन सहजता से बी ई इस दृष्टिकोण के पक्ष में)।

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

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

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