2012-05-18 13 views
10

मैं आप में से किसी से भी सुनना चाहता हूं, जिसने एक सभ्य आकार के नियो 4j ऐप (10 के लाखों नोड्स/रिल्स) को आर्किटेक्टेड और कार्यान्वित किया है - और आपकी सिफारिशें विशेष रूप से wrt मॉडलिंग और विभिन्न एपीआई (वेनिला जावा/ग्रोवी नियो 4 जे बनाम वसंत) -डाटा-नियो 4 जे बनाम ग्रेल्स गोर्म/नियो 4j)।एक नियो 4 जे-आधारित अनुप्रयोग का आर्किटेक्चरिंग - सादे नोड्स और रिश्तों का उपयोग करके वेनिला एपीआई से चिपकाएं या स्प्रिंग/जीओआरएम का उपयोग करें?

मुझे दिलचस्पी है कि क्या यह वास्तव में अतिरिक्त ओजीएम (ऑब्जेक्ट-ग्राफ़-मैपिंग) परत और संबंधित abstractions जोड़ने के लिए भुगतान करता है?

क्या किसी का अनुभव यह है कि नोड्स + गुणों, रिश्तों + गुणों, ट्रैवर्सल और (उदा।) साइफर के साथ 'सादा' ग्राफ-मॉडलिंग से चिपकना सर्वोत्तम है, ताकि वे अपने डेटा को मॉडल और स्टोर कर सकें?

मेरी चिंता यह है कि एक ग्राफ डेटाबेस पर एक विशेष ओजीएम अबास्ट्रक्शन को 'मजबूर करना' डोमेन मॉडल और/या डेटा पूछताछ में लचीलापन को बदलने/बदलने में भविष्य में लचीलापन को प्रभावित करेगा।

हम एक ग्रेल्स की दुकान हैं, और मैंने गोर्म/नियो 4 जे और वसंत-डेटा-नियो 4j के साथ भी प्रयोग किया है।

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

मैं कबूल करने के लिए, मैं एक बाध्यकारी कारण जब मैं (जैसे) POJOs या pogos, एक छोटे से ग्रूवी जादू और कुछ सरल हाथ से लुढ़का डोमेन वस्तु < उपयोग कर सकते हैं एक OGM स्तर का उपयोग करने को खोजने के लिए संघर्ष कर रहा हूँ है/संबंध मैपिंग कोड। जहां तक ​​मैं कह सकता हूं, मुझे लगता है कि मैं सिर्फ & ट्रैवर्सल & साइफर (उर्फ केआईएसएस) नोड्स से निपटने में खुश रहूंगा। लेकिन मुझे दूसरों के अनुभवों और सिफारिशों को सुनकर बहुत खुशी होगी।

अपना समय & विचारों के लिए धन्यवाद,

टी.पी.

उत्तर

7

के बाद से मैं Grails Neo4j प्लगइन के लेखक हूँ, मैं पक्षपाती हो सकता है। प्लगइन बनाने का मुख्य कारण उपयोग के मामलों के 80% के लिए नियो 4j को अपने शक्तिशाली आउट ऑफ़ द बॉक्स मचान के साथ Grails डोमेन कक्षाओं की आसानी को लागू करना था। अन्य 20% के लिए जहां विशिष्ट आवश्यकताओं को ट्रैवर्सल आदि जैसी चीजों की आवश्यकता होती है, हम सीधे नियो 4 जे एपीआई (ट्रैवर्सल/साइफर) का उपयोग कर रहे हैं और GORM API का उपयोग नहीं करते हैं।

नियो 4j प्लगइन का वर्तमान संस्करण सुपरनोइड समस्या से पीड़ित है क्योंकि प्रत्येक डोमेन इंस्टेंस एक सब्रेफर नोड से जुड़ा हुआ है। यदि एकाधिक समवर्ती अनुरोध (उर्फ धागे) नए डोमेन उदाहरण जोड़ते हैं तो लॉकिंग अपवाद प्राप्त करने का मौका होता है। मैं इसे उप-सब्रेफरेंस दृष्टिकोण या इंडेक्सिंग का उपयोग करके ठीक करने वाला हूं।

साइफर का उपयोग नियो 4 जे Grails प्लगइन में भी किया जा सकता है।

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

हम ~ 60k उपयोगकर्ताओं और ~ 10^6 रिले के साथ उत्पादक अनुप्रयोग में प्लगइन के पूर्ववर्ती संस्करण का उपयोग कर रहे हैं। एनडीए के कारण मैं उस पर अधिक जानकारी नहीं दे सकता।

+0

धन्यवाद स्टीफन, वास्तव में मैं आपको सीधे GORM/Neo4J प्लगइन के साथ 'वास्तविक जीवन' अनुभव के बारे में पूछने के लिए सीधे संपर्क में जा रहा था। मैं Neo4J का उपयोग करते समय सामान्य आर्किटेक्चरल और कोडिंग 'गॉथचास' से बचने की कोशिश कर रहा हूं, खासतौर पर उस मामले में जहां ऑब्जेक्ट-ग्राफ़-मैपिंग परत का उपयोग किया जाता है। –

0

हम grails का उपयोग नहीं करते हैं, लेकिन एक संकर सादा neo4j/spring-data-neo4j समाधान का उपयोग करें।कारण इस तथ्य पर आधारित है कि हमारे कुछ डोमेन डेटा में एक निश्चित स्कीमा है और कुछ नहीं। एसडीएन बहुत बोझ दूर लेता है और जरूरत पड़ने पर सादे neo4j के साथ मिश्रित किया जा सकता है।

हमारे पास कक्षाएं हैं जो डेटा मॉडल का वर्णन करती हैं, इन वर्गों के लिए ऑब्जेक्ट्स हम एसडीएन का उपयोग करते रहेंगे, बिना अतिरिक्त चाल के, हम बस एसडीएन से मूल बातें का उपयोग करते हैं। फिर हमारे पास कक्षाएं हैं जिनमें मॉडल के लिए डेटा शामिल है जो पहले से ज्ञात नहीं है। इन्हें नोड्स में संग्रहीत किया जाता है, यह वर्णन करने के लिए विशेष गुण होते हैं कि डेटा किस प्रकार का डेटा संदर्भित करता है। जब neo4j 2 जारी हो जाता है, तो हम शायद उस जानकारी को लेबल में ले जाएंगे। इन नोड्स के बीच एसडीएन द्वारा प्रबंधित उपर्युक्त डेटा मॉडल द्वारा वर्णित संबंध भी हो सकते हैं। हमारे पास जेनेरिक नोड्स से एसडीएन नोड्स के संबंध भी हैं, जो ठीक काम करता है, क्योंकि सबकुछ एक ही चीज होने पर समाप्त होता है: नोड्स।

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

+0

"जब वसंत 2 जारी हो जाता है": आप शायद "neo4j 2" मतलब था? – t0r0X

+0

यूप। संपादित पोस्ट – Wouter

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