2008-08-30 10 views
5

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

क्या इस तरह के लॉग फ़ाइल या डेटाबेस में स्टोर करना सबसे अच्छा है? मैं पूरी तरह से नुकसान के कारण हूं कि पेशेवरों और विपक्ष क्या हैं, यह छोड़कर कि यह सेटअप करने के लिए एक और तालिका है।

क्या कोई तीसरा (या चौथा आदि) विकल्प है जिसे मुझे पता नहीं है कि मुझे इसमें देखना चाहिए और सीखना चाहिए?

उत्तर

5

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

यदि आप बहुत अधिक प्रदर्शन एक मुद्दा है, या यदि आपके पास प्रति रिकॉर्ड बहुत अधिक संरचित या बड़ी मात्रा में डेटा है, तो डेटाबेस में स्टोर करने के लिए अविश्वसनीय रूप से हो सकता है, तो आप शायद एक फ़ाइल में लिखना चाहते हैं। ध्यान दें कि जब तक आपके एप्लिकेशन में बहुत अधिक लेन-देन डेटाबेस की गति नहीं होती है, तब तक कोई समस्या होने की संभावना नहीं है। यह भी ध्यान रखें कि यदि आप किसी फ़ाइल के साथ काम कर रहे हैं तो आपको समेकित पहुंच (पढ़ने/लिखने/लॉकिंग) को बहुत सावधानीपूर्वक संभालने की आवश्यकता होगी, जो संभवत: ऐसा कुछ नहीं है जिसे आप सौदा करना चाहते हैं।

2

मैं रखरखाव के लिए बस डेटाबेस का उपयोग करता हूं - फ़ाइल पर कई संपादन भी कुछ याद कर सकते हैं।

1

मैं उपरोक्त दोनों सुझावों को दूसरा दूंगा और एक फ़ाइल फ़ाइल लॉग पर उस फ़ाइल लॉकिंग को जोड़ सकता हूं जब बहुत से उपयोगकर्ता हैं।

9

डेटाबेस में संग्रहीत करने के लिए कम से कम एक निश्चित कारण है। आप MySQL (या अन्य डेटाबेस में समान संरचना) में INSERT DELAYED का उपयोग कर सकते हैं, जो तुरंत लौटाता है। आपको इस प्रकार के प्रश्नों के साथ डेटाबेस से कोई रिटर्न डेटा नहीं मिलेगा, और उन्हें लागू होने की गारंटी नहीं है।

INSERT DELAYED का उपयोग करके, आप लॉगिंग के कारण अपने ऐप को बहुत धीमा नहीं करेंगे। डेटाबेस किसी भी समय डिस्क पर INSERT लिखने के लिए स्वतंत्र है, इसलिए यह एक साथ आवेषण का एक गुच्छा बंडल कर सकता है।

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

+2

यह मेरे लिए एक नया है। बहुत चालाक –

+1

गारंटी नहीं है? ऐसा लगता है कि ऐसा अच्छा विचार नहीं है। क्या आप इसे समझा सकते हैं? –

3

मैं log4php के एक बड़े प्रशंसक हूँ। यह आपको लॉगिंग कार्यों के लिए एक मानक इंटरफ़ेस देता है। यह log4j पर आधारित है। लाइब्रेरी एक केंद्रीय कॉन्फ़िगरेशन फ़ाइल लोड करती है, इसलिए लॉगिंग बदलने के लिए आपको कभी भी अपना कोड बदलने की आवश्यकता नहीं है। यह कई लॉग लक्ष्य भी प्रदान करता है, जैसे फाइल, सिसॉग, डेटाबेस इत्यादि।