पाठ फ़ाइल से डेटा पार्स करने पर डेटाबेस का उपयोग कब किया जाना चाहिए?


13

मैं codereview.SE की वृद्धि को मापने के लिए एक पायथन प्रोग्राम बना रहा था । मेरा दृष्टिकोण सामने वाले पृष्ठ पर दिखाए गए "साइट आँकड़े" को प्राप्त करना और उन्हें मेरी हार्ड ड्राइव पर संग्रहीत करना था। मैं हर दिन एक बार ऐसा करने की योजना बना रहा हूं। अब तक मैंने आँकड़े प्राप्त करने और उन्हें एक पाठ फ़ाइल में जोड़ने के लिए पर्याप्त बनाया है। अजगर लिपि को गितुब पर देखा जा सकता है । मैं जिस प्रारूप का उपयोग कर रहा हूं वह निम्नलिखित है

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

मैंने फ़ाइल में उपयोग किए जाने वाले प्रारूप को प्राप्त करने के लिए सिर्फ दो बार स्क्रिप्ट चलाई। शुरू में यह मुझे अच्छा लगा क्योंकि मैं खुद इसे स्टोर कर रहा हूं और फॉर्मेट वैसा ही होगा इसलिए इसे आसानी से पार्स किया जाएगा लेकिन मुझे यकीन नहीं है। ऐसा लगता है कि डेटाबेस का उपयोग करना यहां बेहतर होना चाहिए क्योंकि डेटा प्राप्त करने का तरीका आसान होना चाहिए। बस एक नोट, मैंने कभी भी किसी डेटाबेस का उपयोग नहीं किया है और SQL, MySQL या RDBMS के किसी भी अन्य संस्करण का कोई ज्ञान नहीं है।

इसलिए यह मुझे सवाल पर लाता है। पाठ फ़ाइल में डेटा संग्रहीत करने पर डेटा संग्रहीत करने के लिए एक डेटाबेस को कब प्राथमिकता दी जानी चाहिए? क्या कुछ संकेत हैं जो मुझे इस बारे में निर्णय लेने के लिए दिख सकते हैं कि क्या मुझे डेटाबेस या सरल पाठ फ़ाइलों की आवश्यकता है?

पुनश्च: यदि बेहतर टैग जोड़े जा सकते हैं तो कृपया ऐसा करें। मुझे उन टैग्स के बारे में कुछ संदेह थे जो जोड़े जा सकते थे।


"हर उपकरण एक दायित्व है जब तक आप सीखते हैं कि इसका उपयोग कैसे करें।"
जेएफओ

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

जवाबों:


14

पाठ फ़ाइल में डेटा संग्रहीत करने पर डेटा संग्रहीत करने के लिए एक डेटाबेस को कब प्राथमिकता दी जानी चाहिए?

विकिपीडिया हमें बताता है कि एक डेटाबेस डेटा का एक संगठित संग्रह है । कि उपाय से, अपने पाठ फ़ाइल है एक डेटाबेस। यह कहा जाता है:

डेटा को आम तौर पर वास्तविकता के प्रासंगिक पहलुओं को मॉडल करने के लिए व्यवस्थित किया जाता है जो इस जानकारी की आवश्यकता वाली प्रक्रियाओं का समर्थन करता है। उदाहरण के लिए, होटलों में कमरों की उपलब्धता को इस तरह से मॉडलिंग करना जो रिक्तियों के साथ होटल खोजने में सहायक हो।

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

मुझे एहसास है कि जब आप कहते हैं "डेटाबेस" आप शायद किसी प्रकार के संबंधपरक डेटाबेस प्रबंधन प्रणाली के बारे में सोच रहे हैं, लेकिन डेटाबेस के रूप में आपकी पाठ फ़ाइल के बारे में सोचने से आपका प्रश्न "कब मुझे डेटाबेस का उपयोग करना चाहिए?" "मुझे किस तरह के डेटाबेस का उपयोग करना चाहिए?" उस प्रकाश में चीजों को देखने से उत्तर को देखना आसान हो जाता है: एक बेहतर डेटाबेस का उपयोग करें जब आपको जो मिल गया है वह आपकी आवश्यकताओं को पूरा नहीं करता है।

यदि आपकी पायथन लिपि और सरल पाठ फ़ाइल पर्याप्त रूप से काम करते हैं, तो बदलने की कोई आवश्यकता नहीं है। प्रति दिन केवल एक नया रिकॉर्ड और प्रत्येक वर्ष कंप्यूटर तेज होने के साथ, मुझे संदेह है कि आपका वर्तमान समाधान लंबे समय तक व्यवहार्य हो सकता है। एक दशक के आंकड़े से आपको केवल 3650 रिकॉर्ड मिलेंगे, जिसे एक बार पार्स करने के बाद, संभवतः 75 किलोबाइट से भी कम की आवश्यकता होगी।

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

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

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


3
"डेटाबेस के रूप में आपकी पाठ फ़ाइल के बारे में सोच" बहुत ही व्यावहारिक है। साथ ही मेरे बारे में केवल 3650 प्रविष्टियाँ रखने में मददगार था। इसने समस्या का वास्तविक परिप्रेक्ष्य प्राप्त करने में मदद की।
असीम बंसल

1
बहुत ही कम जवाब में, यह दूसरी बार है जब मैं वापस आया हूं।
हाशिम

6

डेटा बेस के कई फायदे हैं, लेकिन एक्सेस को आसान बनाना उनमें से एक नहीं है। तेज़, अधिक मानकीकृत, एक एम्बेडेड कमांड सबलंगेज के रूप में व्याख्या करने योग्य, सुरक्षित, हाँ - लेकिन आसान नहीं है। कोई फर्क नहीं पड़ता कि आपकी भाषा और मानक पुस्तकालय कितनी मात्रा में चीनी प्रदान करते हैं, आपके पास पहले स्थान पर एक डेटा बेस होना चाहिए, इसके लिए एक कनेक्शन खोलें और अपने प्रोग्राम के डेटा को पूरी तरह से अलग और पीछे से रूट करें। जब तक आप जो कुछ भी करते हैं, उसके साथ कोई समस्या नहीं है, और प्रोग्रामिंग में आसानी आपकी प्राथमिकता है, तो कभी भी डेटाबेस पर स्विच न करें क्योंकि आपको लगता है कि यह "अच्छा अभ्यास" है।

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


क्या समग्र डिजाइन के अनुसार सामंजस्य बेहतर नहीं है? मेरे मामले में उदाहरण के लिए, मैं प्रत्येक तिथि के अनुरूप 5 मान संग्रहीत कर रहा हूं। वर्तमान स्थिति में डेटा के बीच कोई सामंजस्य नहीं है।
असेम बंसल

आप सही हैं, यह सुनिश्चित करते हुए कि सभी रिकॉर्ड में फ़ील्ड का एक सुसंगत सेट है और मान इन लाभों में से एक है। (सख्ती से कहें तो यह केवल संबंधपरक डेटा बेस है जो इसकी गारंटी देता है। लोग लंबे समय तक उत्पादन में गैर-संबंधपरक डेटा बेस का उपयोग करते थे, और वर्तमान में वे "NoSQL" आंदोलन के साथ फिर से कर्षण प्राप्त कर रहे हैं।)
किलियन फोथ 22'13

3

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


"कितनी चीजों को पढ़ने / लिखने की जरूरत है" - इससे मदद मिली।
असीम बंसल

2

डेटाबेस का उपयोग न केवल डेटा भंडारण और हेरफेर करने के लिए किया जाता है, इसलिए आपको एक शिक्षित निर्णय लेना होगा:

एक बड़ा कारक वह लाभ है जो आपको मशीन पर एक डेटाबेस स्थापित करने से प्राप्त होता है

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

यदि आप एसक्यूएल के साथ खेलना चाहते हैं और यह क्या कर सकते हैं, तो SQLFiddle.com के पास कुछ अलग आरडीबीएमएस मॉडल हैं, जिनके साथ आप खिलौने बना सकते हैं (प्रश्नों को चलाएं, स्कीमा आदि बनाएं)


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

2

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

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

मेरे अनुभव के लिए, यदि आप डेटाबेस के लिए पूरी तरह से नए हैं, तो आपको काउचडब की तरह कुछ का उपयोग करना आसान लग सकता है: http://couchdb.apache.org/ जो कि कोई एसक्यूएल नहीं है और आप प्रश्नों के लिए सीधे जावास्क्रिप्ट या अजगर आदि का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.