2008-09-18 14 views
13

हमने बहुत तीव्र प्रोसेसिंग एप्लिकेशन में फ़िल्टर के प्रकार के रूप में कार्य करने के लिए समाधान के हिस्से के रूप में ड्रोल का उपयोग किया, शायद 500,000 + काम करने वाली मेमोरी ऑब्जेक्ट्स पर 100 नियमों को चलाया जा सकता है। पता चला है कि यह बेहद धीमी है। किसी और को बैच प्रकार प्रसंस्करण अनुप्रयोग में ड्रोल का उपयोग करके कोई अनुभव है?भारी बैच प्रक्रिया में डोलॉल्स का उपयोग

+0

कुछ भी नया साझा करने के लिए पैरामीटर का उपयोग करके सेट किया जा सकता .. ?? – Scoobie

उत्तर

3

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

कम से कम कुछ अच्छा मैं drools के बारे में याद है कि उनके देव टीम बहुत उपयोगी आईआरसी पर उपलब्ध है और किया गया है, तो आप उन्हें एक कोशिश दे सकता है, वे सब के बाद विशेषज्ञों रहे हैं: irc.codehaus.org #drools

1

ड्रूल्स वास्तव में बड़ी संख्या में वस्तुओं पर चलाने के लिए डिज़ाइन नहीं किया गया है। यह कुछ वस्तुओं पर जटिल नियम चलाने के लिए अनुकूलित है।

प्रत्येक अतिरिक्त ऑब्जेक्ट के लिए वर्किंग मेमोरी प्रारंभिक बहुत धीमी है और कैशिंग रणनीतियों को प्रति कार्य मेमोरी ऑब्जेक्ट पर काम करने के लिए डिज़ाइन किया गया है।

0

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

4

आपके नियमों पर निर्भर करता है - 500K ऑब्जेक्ट्स उचित स्मृति के लिए उचित है (इसे स्मृति में एक आरईटीई नेटवर्क को पॉप्युलेट करना है, इसलिए स्मृति उपयोग 500K ऑब्जेक्ट्स का एक बहु है - यानी ऑब्जेक्ट्स के लिए स्पेस + नेटवर्क स्ट्रक्चर, इंडेक्स के लिए स्पेस आदि) - यह संभव है कि आप डिस्क पर पेजिंग कर रहे हैं जो वास्तव में धीमा होगा।

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

2

मैं सिर्फ खुद को डोलॉल्स सीख रहा हूं, इसलिए शायद मुझे कुछ याद आ रहा है, लेकिन एक बार में पांच सौ हजार वस्तुओं का पूरा बैच क्यों काम कर रहा है? एकमात्र कारण यह है कि मैं सोच सकता हूं कि ऐसे नियम हैं जो केवल तभी लाते हैं जब बैच में दो या दो से अधिक आइटम संबंधित होते हैं।

यदि ऐसा नहीं है, तो शायद आप एक स्टेटलेस सत्र का उपयोग कर सकते हैं और एक समय में एक ऑब्जेक्ट का दावा कर सकते हैं। मुझे लगता है कि नियम उस मामले में 500k गुना तेजी से चलेंगे।

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

एक वैकल्पिक दृष्टिकोण दूसरे चरण के दौरान कोशिश करने के लिए और वस्तुओं की संबंधित समूह की पहचान करने और जोर समूहों में वस्तुओं, आगे विभाजित RETE नेटवर्क के रूप में रूप में अच्छी तरह स्मृति काम करने में डेटा का दायरा कम हो जाएगा।

0

एक स्टेटलेस सत्र का उपयोग करें और वस्तुओं को एक समय में जोड़ें?

4

मैंने 1M तथ्यों वाले एक राज्यव्यापी मेमोरी मेमोरी के साथ एक ड्रोल का उपयोग किया है। आपके नियमों और अंतर्निहित जेवीएम दोनों के कुछ ट्यूनिंग के साथ, प्रारंभिक स्टार्ट-अप के लिए कुछ मिनटों के बाद प्रदर्शन काफी अच्छा हो सकता है। यदि आप अधिक जानकारी चाहते हैं तो मुझे बताएं।

+1

मुझे उन विवरणों में दिलचस्पी है, क्या आप उन्हें हमारे साथ साझा कर सकते हैं? मैं डेटा के एक बड़े सेट पर ड्रोल भी चला रहा हूं और कोई भी ट्यूनिंग बहुत अच्छा होगा। –

0

मुझे कुछ हजार वस्तुओं को पार्स करने के बाद आउटऑफमेमरी त्रुटियों में समस्याएं थीं। एक अलग डिफ़ॉल्ट अनुकूलक सेट करने से समस्या हल हो गई।

OptimizerFactory.setDefaultOptimizer(OptimizerFactory.SAFE_REFLECTIVE); 
-1

इस अनुकूलक भी -Dmvel2.disable.jit = सच

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