मैं एक ऐसी प्रणाली तैयार कर रहा हूं जिसमें बड़ी संख्या में उपयोगकर्ता लेनदेन का विश्लेषण करना चाहिए और समेकित उपायों (जैसे रुझान और आदि) का उत्पादन करना चाहिए। सिस्टम को तेजी से काम करना चाहिए, मजबूत और स्केलेबल होना चाहिए। सिस्टम जावा आधारित है (लिनक्स पर)।वास्तविक समय विश्लेषणात्मक प्रसंस्करण प्रणाली डिजाइन
डेटा उस सिस्टम से आता है जो उपयोगकर्ता लेनदेन की लॉग फ़ाइलों (सीएसवी आधारित) उत्पन्न करता है। सिस्टम हर मिनट एक फ़ाइल उत्पन्न करता है और प्रत्येक फ़ाइल में विभिन्न उपयोगकर्ताओं के लेन-देन होते हैं (समय के अनुसार क्रमबद्ध), प्रत्येक फ़ाइल में हजारों उपयोगकर्ता हो सकते हैं।
एक CSV फ़ाइल के लिए एक नमूना डेटा संरचना:
10: 30: 01, उपयोगकर्ता 1, ...
10: 30: 01, उपयोगकर्ता 1, ...
10:30:02 , उपयोगकर्ता 78, ...
10: 30: 02, उपयोगकर्ता 2, ...
10: 30: 03, उपयोगकर्ता 1, ...
10: 30: 04, उपयोगकर्ता 2, ...
। । ।
मैं जिस प्रणाली की योजना बना रहा हूं उसे फाइलों को संसाधित करना चाहिए और वास्तविक समय में कुछ विश्लेषण करना चाहिए। इसे इनपुट इकट्ठा करना है, इसे कई एल्गोरिदम और अन्य सिस्टम में भेजना है और डेटाबेस में गणना किए गए परिणाम संग्रहीत करना है। डेटाबेस में वास्तविक इनपुट रिकॉर्ड नहीं हैं लेकिन लेनदेन के बारे में केवल उच्च स्तर के समेकित विश्लेषण हैं। उदाहरण के लिए रुझान और आदि
पहला एल्गोरिदम जिसे मैं उपयोग करने की योजना बना रहा हूं, कम से कम 10 उपयोगकर्ता रिकॉर्ड के लिए आवश्यक है, अगर इसे 5 मिनट के बाद 10 रिकॉर्ड नहीं मिल पा रहे हैं, तो इसका उपयोग कभी भी उपलब्ध डेटा का उपयोग करना चाहिए।
मैं कार्यान्वयन के लिए तूफान का उपयोग करना चाहता हूं, लेकिन मैं इस चर्चा को यथासंभव डिजाइन स्तर में छोड़ना पसंद करूंगा।
सिस्टम घटकों की एक सूची:
एक है जो आने वाली फाइलों हर मिनट पर नज़र रखता है काम।
एक कार्य जो फ़ाइल को पढ़ता है, इसे पार्स करता है और इसे अन्य सिस्टम घटकों और एल्गोरिदम के लिए उपलब्ध कराता है।
उपयोगकर्ता के लिए 10 रिकॉर्ड (5 मिनट से अधिक नहीं), 10 रिकॉर्ड एकत्र होने पर, या 5 मिनट बीतने के लिए एक घटक बफर करने के लिए एक घटक है, यह समय आगे प्रसंस्करण के लिए एल्गोरिदम को डेटा भेजने का समय है। चूंकि आवश्यकता एल्गोरिदम के लिए कम से कम 10 रिकॉर्ड की आपूर्ति करने के लिए है, इसलिए मैंने स्टॉर्म फील्ड ग्रुपिंग का उपयोग करने का विचार किया (जिसका अर्थ है कि एक ही कार्य को उसी उपयोगकर्ता के लिए बुलाया जाता है) और कार्य के अंदर 10 उपयोगकर्ता के रिकॉर्ड संग्रह को ट्रैक करना, निश्चित रूप से मैं इन कार्यों में से कई को रखने की योजना है, प्रत्येक उपयोगकर्ता के एक हिस्से को संभालता है।
अन्य घटक भी हैं जो एक ही लेनदेन पर काम करते हैं, उनके लिए मैं अन्य कार्यों को बनाने की योजना बना रहा हूं जो प्रत्येक लेनदेन को प्राप्त करते हैं क्योंकि इसे पार्स किया जाता है (अन्य कार्यों के समानांतर में)।
मुझे # 3 के साथ आपकी मदद की ज़रूरत है।
ऐसे घटक को डिजाइन करने के लिए सबसे अच्छा अभ्यास क्या है? यह स्पष्ट है कि इसे प्रति उपयोगकर्ताओं के 10 रिकॉर्ड के लिए डेटा को बनाए रखने की आवश्यकता है। एक महत्वपूर्ण मूल्य मानचित्र सहायता कर सकता है, क्या यह नक्शा कार्य में स्वयं प्रबंधित या वितरित कैश का उपयोग करना बेहतर है? उदाहरण के लिए रेडिस एक महत्वपूर्ण मूल्य स्टोर (मैंने इसे पहले कभी नहीं उपयोग किया)।
आपकी मदद के लिए धन्यवाद