फ़ाइल या डेटाबेस तालिका में प्रवेश करें?


12

मैं एक वेब एप्लिकेशन विकसित कर रहा हूं जो विभिन्न डेटा के लिए MS SQL का उपयोग करता है: जिसमें उपयोगकर्ता, उपयोगकर्ता खाते, उपयोगकर्ता लाइसेंस, लाइसेंस मूल्य, चालान शामिल हैं।

मुझे सिस्टम के उपयोगकर्ताओं के वास्तविक-समय उपयोग का उपयोग करने की आवश्यकता है, और मासिक बिलिंग के लिए इसका उपयोग करें: उदाहरण के लिए, जब भी कोई उपयोगकर्ता एक विशिष्ट पृष्ठ / URL प्राप्त करता है और उपयोगकर्ताओं को उनके द्वारा प्राप्त किए गए पृष्ठों की संख्या के आधार पर महीने के अंत में बिल देता है।

  • क्या मुझे अपने MS SQL डेटाबेस में इन लॉग ईवेंट को किसी तालिका में लिखना चाहिए?

  • क्या मुझे इन लॉग ईवेंट को गैर-SQL परिशिष्ट-लॉग फ़ाइल में लिखना चाहिए?

  • क्या मुझे इन लॉग ईवेंट को प्रत्येक उपयोगकर्ता के लिए एक अलग लॉग फ़ाइल में लिखना चाहिए?

यह विशेष रूप से उच्च-मात्रा वाली वेब साइट नहीं है: उदाहरण के लिए, प्रत्येक अधिकतम 5 लॉग करने योग्य घटनाओं / दिन => 50,000 घटनाओं / दिन = 30 घटनाओं / मिनट = 18,000,000 घटनाओं / वर्ष में औसतन 10,000 उपयोगकर्ता।

मैं पूछ रहा हूं क्योंकि या तो विकल्प व्यवहार्य लगता है और मैं नहीं देखता कि क्या एक स्पष्ट लाभ है।

एक बिलयोग्य घटना से जुड़ा डेटा सरल है, जैसे:

  • उपयोगकर्ता आईडी (SQL में उपयोगकर्ता तालिका के लिए विदेशी कुंजी संबंध)
  • दिनांक और समय
  • बिल योग्य पृष्ठ का URL

इस प्रश्न का मेरा अपना उत्तर इस प्रकार है:

  • डेटाबेस तालिका में लॉग लिखने के कुछ लाभ:

    • संबंधपरक अखंडता: उदाहरण के लिए लॉग की गई घटनाएं वैध उपयोगकर्ता आईडी से जुड़ी होती हैं (उपयोगकर्ता आईडी को तालिकाओं के बीच एक विदेशी कुंजी के रूप में परिभाषित करके)
    • बिलिंग के लिए पढ़ने में आसान: SELECT COUNT GROUP BYप्रति उपयोगकर्ता लॉग इवेंट की संख्या की एक संख्या प्राप्त करने के लिए
  • लॉग फ़ाइल में लिखने के कुछ लाभ:

    • आसान प्रदर्शन: SQL का उपयोग अक्सर कम किया जाता है जैसे केवल उपयोगकर्ता लॉग-इन घटनाओं के लिए, और ज्यादातर केवल पढ़ने के लिए उपयोग किया जाता है
    • आसान प्रबंधन: डेटाबेस से हटाने / संग्रह करने के बजाय पुरानी लॉग फ़ाइलों को स्थानांतरित करके पुराने डेटा को संग्रहित करना आसान है।

कृपया मुझे बताएं कि क्या मेरा उत्तर गलत है; या कुछ के महत्व को अतिरंजित करता है; या कुछ महत्वपूर्ण विचार को भूल गया है।

और / या कृपया मुझे बताएं कि आपका जवाब क्या है, अगर यह मेरा अलग है।


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

1
यदि आप log4net जैसे एक जाने-माने पैकेज का उपयोग कर रहे हैं - और यह संभवत: अपने स्वयं के रोल करने के बजाय एक अच्छा विचार होगा - यह कॉन्फ़िगरेशन को केवल करने के लिए फ़्लिपिंग की बात होनी चाहिए। @tom - पृथक्करण अच्छा है, लेकिन केवल दो डेटाबेस क्यों नहीं हैं, एक लाइव डेटा के लिए और दूसरा आर्काइविंग लॉग आदि के लिए?
जूलिया हेवर्ड

2
ओपी का कहना है कि यह मासिक बिलिंग के लिए है - तो मुझे उम्मीद है कि बिलिंग तर्क को डीबी पर लागू करना फ्लैट फ़ाइलों की तुलना में कहीं अधिक आसान होगा?
जूलिया हेवर्ड

1
आपने "SQL" शब्द का उपयोग किया था जब आपका मतलब "डेटाबेस" था। मैंने कुछ सुधार किए। SQL एक ऐसी भाषा है जिसे आप डेटाबेस में पढ़ने और लिखने के लिए उपयोग करते हैं। MS SQL Server एक RDBMS का नाम है। अकेले "SQL" का मतलब "MS SQL Server डेटाबेस" नहीं है।
ट्यूलेंस कोर्डोवा

1
@gnat मुझे नहीं लगता कि यह कोई डुप्लिकेट है: दूसरा लॉगिंग त्रुटियों के बारे में था, जबकि यह बिलिंग के लिए लॉगिंग उपयोग के बारे में है (और इस मामले में upvoted और स्वीकृत उत्तर RDBMS का उपयोग करना था)।
क्रिस डब्ल्यूआर

जवाबों:


13

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

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

आपका तीसरा विकल्प, वैसे, दोनों को करना है। अधिकांश आवश्यकताओं के लिए डेटाबेस का उपयोग करें, लेकिन ऑडिटिंग उद्देश्यों के लिए लॉग फ़ाइल है।


3
डेटाबेस का उपयोग करने के लिए एक और बोनस कुछ लॉगिंग के लिए ट्रिगर का उपयोग कर रहा है। कोई अतिरिक्त कोड आवश्यक नहीं होगा। यदि डेटा तालिका ए में डाला जाता है, तो लॉग संदेश एक्स डालें
ग्रेग बर्गहर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.