2010-02-22 14 views
5

पर लॉगिंग के लिए प्रदर्शन तुलना हमारे पास हमारे .NET (C#) सर्वर एप्लिकेशन में लॉग इन करने के लिए कई विकल्प हैं। हम एंटरप्राइज़ लाइब्रेरी का उपयोग करने जा रहे हैं। तो यहां जाने के तरीके हैं:MSMQ/टेक्स्ट फ़ाइल/डेटाबेस

1) एमएसएमक्यू को समकालिक रूप से लॉग लिखना, फिर विन सेवा के साथ एमएसएमक्यू पढ़ना। कतार सर्वर अनुप्रयोग के लिए स्थानीय मशीन पर है।
2) डिस्क पर लॉग लिखना (यानी पाठ फ़ाइलों को रोल करना) समकालिक रूप से।
3) डेटाबेस में लॉगिंग (ओरेकल, हमारे आवेदन में) सिंक्रनाइज़ेशन।

लॉग राशि काफी अधिक हो सकती है। तो कौन सा सबसे अधिक प्रदर्शन करने वाला है? मुझे लगता है कि आदेश 1, 2, 3 है। क्या मैं सही हूँ? क्या इस विशिष्ट परिदृश्य में लिखने की गति के अलावा कोई अन्य प्रदर्शन कारक है? क्या कोई अन्य विकल्प है, मैंने यहां बताया नहीं है, यह और बेहतर तरीका हो सकता है?

उत्तर

4

प्रवेश के मामले में आवेदन की जरूरतों को सुनवाई के बिना:

मैं लग रहा है कि MSMQ प्रवेश परिदृश्य समस्या के लिए एक बड़ा हथौड़ा का एक सा है मिलता है।

एमएसएमक्यू निश्चित रूप से तेज़ होगा, क्योंकि आपका एप्लिकेशन डिस्क विलंबता और डीबी कनेक्शन निर्माण & से निपटने के बजाय नेटवर्क संचार प्रोटोकॉल का उपयोग करेगा। हालांकि, एमएसएमक्यू डिस्क का उपयोग करता है, लाभ संभवतः नगण्य है। फिर सवाल यह है कि क्या एमएसएमक्यू लक्ष्य/गंतव्य कतार स्थानीय मशीन पर है। डिस्क लॉगिंग

साथ

स्टिक उचित रोलओवर (दिन/घंटे के रूप में) की आवश्यकता के साथ डिस्क पर एक फ़ाइल में प्रवेश के साथ चिपके हुए पर विचार करें। यदि आप स्पिंडल गति से सुपर संबंधित हैं तो कुछ कामकाज हैं - उन लॉग फ़ाइलों को रैम डिस्क पर लिखने पर विचार करें। फिर जब आप फिट देखते हैं तो उन फ़ाइलों को रैम से कॉपी करें और समय पर डिस्क पर कॉपी करें।

उपाय आपका लॉगिंग प्रदर्शन समय से पहले अनुकूलन के बारे में मजाक की जरूरत

क्यू। मापें, और फिर मापें। आपको यह पता नहीं चलेगा कि आपको तब तक क्या चाहिए जब तक कि आप यह अनुमान न लें कि आपका समाधान कितना अच्छा प्रदर्शन कर रहा है। इस बात पर विचार करें कि आपके पास 10,000 आरपीएम स्पिंडल हैं, और संभवतः एक डिस्क लॉगिंग समाधान पर्याप्त प्रदर्शन करेगा। अगर एमएसएमक्यू या डेटाबेस लिखने जैसे 'आउटसोर्स' घटक के जटिल समाधान पर कूदना है तो यज्ञि का थोड़ा सा हिस्सा निकल सकता है। मैं इसे गति के चारों ओर अपनी कहा आवश्यकताओं के साथ कहते हैं।

+0

हाय, उत्तर के लिए धन्यवाद। "एमएसएमक्यू लक्ष्य/गंतव्य कतार" के संबंध में अद्यतन प्रश्न। – rovsen

1

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

इसके अलावा, क्या आपने log4net को देखा? इसमें डिस्क पर एक शक्तिशाली घूर्णन लॉग, यूडीपी लॉगिंग, सहित कई लॉगिंग विकल्प शामिल हैं ....

आप स्प्लंक को भी बनाने के बाद अपनी लॉग फ़ाइलों को खोजने के तरीके के रूप में देखना चाहते हैं।

1

आप एमएसएमक्यू, फाइल, और डीबी की रैंकिंग सामान्य स्थितियों में सही होना चाहिए।

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

इसके अलावा, यदि आप वास्तव में प्रदर्शन के बारे में चिंतित हैं तो आप एंटरप्राइज़ लाइब्रेरी के अलावा अन्य विकल्पों की जांच कर सकते हैं। जैसे log4net ऐतिहासिक रूप से तेजी से चला गया है।

प्रदर्शन के अलावा, मैं अन्य आवश्यकताओं पर भी विचार करूंगा। जैसे क्या आपको लॉग पर रिपोर्ट करने या पूछने की आवश्यकता है? क्या आपको केंद्रीय लॉग रिपोजिटरी की आवश्यकता है (या यह उपयोगी होगा)? यदि इनमें से किसी भी प्रश्न का उत्तर हाँ है, तो आप शायद डेटाबेस या एमएसएमक्यू डेटाबेस के साथ जाना चाहेंगे।

अन्य विचार मौजूदा कार्यान्वयन या मानक, समग्र समाधान जटिलता (एमएसएमक्यू> फ़ाइल) हो सकते हैं, विभिन्न विकल्पों की सहायकता (उदाहरण के लिए यदि आप कोई परिचालन विशेषज्ञता नहीं है तो आप एमएसएमक्यू का उपयोग नहीं करना चाहेंगे)।