यह निर्धारित करने का सबसे अच्छा तरीका है कि डेटाबेस का उपयोग कब करना उचित है?


13

मैंने PHP और MySQL का उपयोग करके वेब विकास में अपना प्रोग्रामिंग करियर शुरू किया। मैं सबसे गतिशील डेटा के भंडारण के साथ-साथ कुछ सेटिंग / पैरामीटर डेटा के उपयोग के लिए काफी आदी हो गया। कभी-कभी बहुत अधिक डेटा होता है जबकि अन्य समय सारणियों में प्रविष्टियां कुछ ही होंगी। मुझे यह स्वाभाविक प्रतीत हुआ और जहाँ तक मुझे ज्ञात है यह कमोबेश वेब विकास में एक स्वीकार्य दृष्टिकोण है। (मुझे सही जवाब दो अगर मैं गलत हूँ...)

मैं अब डेस्कटॉप अनुप्रयोगों में देरी कर रहा हूं और मेरा प्राकृतिक झुकाव फिर से एक db का उपयोग करके बहुत सारी जानकारी संग्रहीत करने के लिए है जो कि एप्लिकेशन के उपयोग के माध्यम से उत्पन्न होगा। हालाँकि, जहां तक ​​मैं बता सकता हूं कि मैं बहुत बार एक डीबी का उपयोग करते हुए एप्लिकेशन (जो मैं उपयोग करता हूं) नहीं देखता हूं। [संपादित करें: यह तब से बताया गया है कि यह एक दोषपूर्ण धारणा थी कि कई अनुप्रयोग प्रोग्राम में एम्बेडेड हल्के डीबीएस का उपयोग करते हैं।] इसका क्या कारण है? किस बिंदु पर db का उपयोग करना उचित है? क्या इस मामले पर कोई मानक हैं? इसके अलावा एक डेस्कटॉप एप्लिकेशन को विकसित करने के लिए db का उपयोग न करने के क्या कारण हैं?


2
"हालांकि, जहां तक ​​मैं बता सकता हूं कि मैं एप्लिकेशन नहीं देखता हूं (जो कि मैं उपयोग करता हूं) एक डीबी का उपयोग अक्सर"? किस पर आधारित? यदि वे SQLite का उपयोग करते हैं, तो आप कैसे बता सकते हैं कि वे डेटाबेस का उपयोग कर रहे थे या नहीं कर रहे थे?
एस.लॉट

इसलिए मैंने कहा था जहाँ तक मैं बता सकता हूँ कि मैं जानता था कि एक संभावना थी कि मैं गलत था। मुझे लगा कि कुछ ऐप्स हो सकते हैं जो एम्बेडेड db का उपयोग करते हैं ... क्या ऐप्स के लिए dbs का उपयोग करना बहुत आम है?
केनेथ

@Kenneth: कृपया DBite को SQLite की तरह एम्बेड करें। वहां कई हैं। वे व्यापक रूप से उपयोग किए जाते हैं। AFAIK, Apple के iOS सभी दृढ़ता के लिए इसका उपयोग करता है । कृपया Google
एस.लॉट

2
मैं गूगल बहुत करता हूं। कभी-कभी यद्यपि कुछ भी अनुभवी राय को प्रतिस्थापित नहीं करता है जिसे आप हमेशा गुगली नहीं पाते हैं।
केनेथ

1
मुझे लगता है कि ये टिप्पणियां दोषपूर्ण धारणा को सही करने के लिए पर्याप्त हैं। मैं त्रुटि के लिए माफी मांगता हूं। मुझे लगता है कि मैं एक स्वस्थ मिश्रण का उपयोग करता हूं और सवाल पूछ रहा हूं। कभी-कभी बाद के IMHO के लिए कोई विकल्प नहीं होता है। अब मेरा गुग्लिंग बेहतर निर्देशित और अधिक उत्पादक होगा।
केनेथ

जवाबों:


4

यदि आपका आवेदन दस्तावेज़-उन्मुख है, तो दस्तावेज़ फ़ाइल में चीजों को संग्रहीत करें

यदि आप किसी एक दस्तावेज़ (XML दस्तावेज़ की तरह) के लिए बहुत अधिक संरचित डेटा के साथ आवेदन करते हैं, तो डेटाबेस का उपयोग करें


7

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

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

वेब डेवलपमेंट के साथ, सर्वर स्वाभाविक रूप से एक बैक एंड है, जहां डेटाबेस होना कोर्स का बराबर है। जैसे। उपयोगकर्ताओं को अपने अंत में एक डेटाबेस स्थापित करने के बारे में चिंता करने की ज़रूरत नहीं है।


तो आप तब तक स्टैंड-अलोन ऐप्स के लिए db का उपयोग नहीं करने की सलाह देंगे, जब तक कि भारी मात्रा में डेटा वास्तव में वारंट न कर दे?
केनेथ

लाइटवेट डीबी का उपयोग करने के बारे में आपके विचार क्या हैं ... पूर्ण पैमाने पर डीबी के समान हैं?
केनेथ

1
@Kenneth: मैं कहूँगा "यह निर्भर करता है"। यदि ऐप बड़ी मात्रा में सारणीबद्ध डेटा के लिए कॉल करता है जो वास्तव में एक उचित DB में होने के लिए कहता है, तो यह तर्क काफी मजबूत हो सकता है कि ऐप को एक हल्के DB के साथ शिप किया जाए। लेकिन अगर यह सिर्फ कॉन्फ़िगरेशन / सेटिंग्स प्रकार का डेटा है, तो यह संभवतः ओवरकिल है।
बॉबी टेबल्स

5

जब वे चल रहे होते हैं तो डेस्कटॉप एप्लिकेशन राज्य बनाए रखते हैं। जबकि वेब विकास आमतौर पर नहीं होता है। इसलिए जब आपको पृष्ठ लोड के बीच डेटाबेस में उपयोगकर्ता सेटिंग को संग्रहीत करने की आवश्यकता हो सकती है, तो डेस्कटॉप ऐप में आप बस उन्हें मेमोरी में रख सकते हैं। इस तरह के लगातार भंडारण की आवश्यकता को बहुत कम कर देता है। जब आप उपयोगों के बीच वरीयताओं को संग्रहीत करना चाहते हैं, तो आप उन सभी को एक फ़ाइल में सहेज सकते हैं, या उन्हें विंडोज रजिस्ट्री की तरह कहीं रख सकते हैं।

कहा जा रहा है कि, डेस्कटॉप एप्लिकेशन में डेटाबेस सिस्टम का काफी उपयोग किया जाता है। वेब से बहुत पहले, डेस्कटॉप एप्लिकेशन DBMS के लिए कनेक्शन कर दिए गए हैं। मुख्य रूप से उन अनुप्रयोगों के लिए जो दस्तावेज़ आधारित नहीं हैं। हालांकि इन दिनों, हल्के वजन इंजन की बेहतर उपलब्धता के साथ, आप लाइनों को थोड़ा धुंधला कर रहे हैं। पूर्व के लिए, मैं अपने कुछ ऐप्स में SQLite db के दस्तावेज़ों के रूप में उपयोग करता हूँ।


+1 यदि आपके पास जटिल दृढ़ता वाले मुद्दे नहीं हैं, जैसे कि बहु-उपयोगकर्ता, बहु-स्थान, साथ ही साथ एक पारंपरिक डेटाबेस को अवरुद्ध करने वाले अद्यतनों को ओवरकिल किया जा सकता है। यदि प्रश्न में डेटा काफी स्थिर है (यह विकसित हो सकता है या इसके लिए संलग्न हो सकता है, लेकिन विकसित या अद्यतन नहीं हो सकता है), और तनाव / प्रतियोगिता लगातार या विकृत नहीं है (साइड इफेक्ट्स / उपयोगकर्ता-अनुभव एक लॉक पर मुफ्त में प्रतीक्षा करने के लिए प्रदर्शन और जटिलता ट्रेडऑफ़ को देखते हुए अस्वीकार्य नहीं है), आपको डेटाबेस की आवश्यकता नहीं हो सकती है।
जस्टिन सी सी

4

एक चीज जिसे आप देखना चाहते हैं, वह हल्के डेटाबेस हैं जिन्हें वास्तविक रूप से चलने वाली डेटाबेस सेवा की आवश्यकता नहीं है। जैसे Microsoft मोर्चे पर SQL Server कॉम्पैक्ट है , जो मुफ़्त है, केवल डेटाबेस के लिए एक फ़ाइल की आवश्यकता होती है और कुछ DLL आपके ऐप में जोड़े जाते हैं, और एक डेवलपर के दृष्टिकोण से, "वास्तविक" SQL सर्वर के समान व्यवहार करता है।

मैं सकारात्मक हूं कि अन्य प्लेटफार्मों पर समान विकल्प हैं।


1
जावा पक्ष पर एक समान उदाहरण डर्बी है। मुझे लगता है कि अन्य भी हैं।
jprete

1
ऐसा लगता है कि यह एक आदर्श समाधान हो सकता है ... मैं वास्तव में डीबी का उपयोग करने का आनंद लेता हूं! lol
केनेथ

वहाँ हल्के db का उपयोग करने के लिए downsides रहे हैं?
केनेथ

@ केनेथ: वे आपके इंस्टॉलेशन को बड़ा बनाते हैं और कोडबेस को बढ़ा सकते हैं। लेकिन यह एक क्लाइंट पर एक पूरे डेटाबेस सर्वर को स्थापित करने से बहुत कम है, जो कि आमतौर पर केवल तब किया जाता है जब एप्लिकेशन वितरित किया जाता है और अधिक महत्वपूर्ण डेटाबेस की आवश्यकता होती है। बर्कले DB सबसे अधिक इस्तेमाल किया जाता है।
परिक्रमा

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

2

वेब अनुप्रयोगों पर, किसी भी स्थिर स्थिति को एक केंद्रीकृत भंडारण पर संग्रहीत करना महत्वपूर्ण है। चूंकि वेब ऐप आमतौर पर पहली अड़चन होती है, इसलिए यह महत्वपूर्ण है कि इसे बिना किसी सवाल के वितरित किए जाने में सक्षम होना चाहिए जिसमें डेटा ('साझा कुछ भी नहीं' सिद्धांत) की प्रतिलिपि हो। केवल एक डेटाबेस ही नहीं, बल्कि memcachedकतार प्रणाली भी उसी कारण से हैं।

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

जीयूआई अनुप्रयोगों में जटिल दस्तावेज भी हो सकते हैं जिन्हें स्मृति में वस्तुओं के जटिल वेब के रूप में संभाला जा सकता है। एक संबंधपरक डीबी स्कीमा में संरचना को सामान्य करने से समस्या में महत्वपूर्ण जटिलता जुड़ सकती है, कभी-कभी एक बार के बाइटस्ट्रीम में पूरी बात को क्रमबद्ध करना आसान होता है। कई ओओपी ढांचे में कुछ सुविधाएं शामिल हैं।

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

एक ही नस पर, एक एम्बेड करने योग्य डेटाबेस लाइब्रेरी (BDB, टोक्यो कैबिनेट, SQLite, MS-SQL * सर्वर कॉम्पैक्ट, आदि) का उपयोग करना एक और महान दृष्टिकोण है।


1

डेटाबेस को ओवरकिल किया जा सकता है, लेकिन वे आमतौर पर नहीं होते हैं। बहुत ही सरल कार्यक्रमों की जरूरत नहीं है। यदि आपका दस्तावेज़ समय की एक तुच्छ मात्रा में मेमोरी में लोड हो सकता है और मुद्दों के बिना वहां रह सकता है, तो आपको वास्तव में कई कार्यक्रमों के लिए एक की आवश्यकता नहीं है।

उदाहरण के लिए विचार करें:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

वैसे यह अति सरलीकृत है, लेकिन जाहिर है कि यह बहुत अधिक है। "हैलो वर्ल्ड" के लिए डेटा प्रबंधन के उस स्तर के होने का कोई वास्तविक बिंदु नहीं है

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

अलग-अलग कोडिंग स्टाइल हैं, कई बार एक डेटाबेस में कुछ भी गलत नहीं होता है लेकिन हममें से ज्यादातर लोग बुनियादी कामों के लिए 'दूर' जाना नहीं चाहते हैं। अभी भी कई बार सही डेटाबेस प्रदर्शन के लाभ की पेशकश करेगा। विशेष रूप से उन अंतरों को समझने की कोशिश करें जहां डेटा होगा, यह कितने समय तक रहेगा और जीवनकाल के दौरान इसे क्या बदल देगा।


1

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

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