2009-11-05 12 views
5

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

मेरी राय में, सरणियों कुछ फायदे हैं:

  1. अधिक लचीला (यह किसी भी संरचना है, जो एक बहुत जटिल संबंध को निर्दिष्ट किया जा सकता है)
  2. बेहतर प्रदर्शन (यह, स्मृति में लोड किया जाएगा जो होगा डेटाबेस के I/O संचालन की तुलना में बेहतर पढ़ना/लिखना प्रदर्शन)

लेकिन मेरे सहयोगी ने तर्क दिया कि वह डीबी दृष्टिकोण पसंद करते हैं, क्योंकि यह एक समान डेटा दृढ़ता इंटरफेस रख सकता है, और अधिक लचीला हो सकता है।

तो किसको प्राथमिकता दी जानी चाहिए? या हम कैसे चुन सकते हैं? या हमें किसी परिदृश्य में एक और दूसरे परिदृश्यों में से एक को प्राथमिकता देना चाहिए? परिदृश्य क्या हैं?

संपादित करें:

मुझे कुछ स्पष्ट करते हैं। वास्तव में जैसे ही बेंजामिन ने शीर्षक में परिवर्तन किया, डेटा जिसे हम किसी सरणी (फ़ाइल) में स्टोर करना चाहते हैं, वह इतनी बार नहीं बदलेगा, जिसका अर्थ यह है कि कोड रनटाइम में सरणी के मान को नहीं बदलेगा। यदि डेटा बहुत बार बदलता है तो मैं निस्संदेह डीबी का उपयोग करूंगा। यही कारण है कि मैंने ऐसी पोस्ट बनाई।

और कभी-कभी ऐसा लगता है कि वास्तव में कुछ जटिल संबंधों स्टोर करने के लिए मुश्किल है: (क अजगर dict या आप एक सरणी के रूप में यह सोच सकते हैं)

Task = { 
    "1" : { 
    "name" : "xx", 
    "requirement" : { 
      "level" : 5, 
      "money" : 100, 
    } 
    ... 
} 
बस ऊपर कोड नमूना तरह

, आवश्यकता क्षेत्र स्टोर करने के लिए कठिन है डीबी में (डीबी में सीधे मसालेदार वस्तु की तरह एक संरचना स्टोर करें? मुझे इतना अच्छा नहीं लगता)। तो ऐसी स्थिति में, मैं सरणी पसंद करूंगा।

तो आपका विचार क्या है? ऐसे परिदृश्य में, हमें डीबी को सरणी पसंद करनी चाहिए, है ना?

सम्मान।

उत्तर

0

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

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

0

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

उन्हें आपके बीन में इंजेक्शन दिया जा सकता है, और आसानी से बदला जा सकता है।

लेकिन अगर आप जावा में विकास कर रहे हैं।

+0

क्षमा करें, हम जावा का उपयोग नहीं करते हैं। और हम इसके बजाय अजगर का उपयोग करते हैं। –

3

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

ओपी से संपादित

टिप्पणी पूछता है क्या एक फ़ाइल का उपयोग हो सकता है के साथ मुद्दों है, यहाँ एक मुट्ठी (विराम एक गहरी साँस लेने के लिए) कर रहे हैं।

  • कन्करेंसी: आप स्थिति है जहाँ एक से अधिक अनुरोध वापस फाइल करने के लिए लिखने की कोशिश कर किया जा सकता है का प्रबंधन करने के लिए है। बहुत मुश्किल नहीं है लेकिन यह एक बाधा बन जाती है।
  • प्रदर्शन: हाँ-इन-मेमोरी सरणी को संशोधित करना तेज़ है लेकिन आप कैसे निर्धारित करते हैं कि सरणी को फ़ाइल में कितना और कब रखा जाना चाहिए। ध्यान दें कि एक डीबी का उपयोग एक उचित इन-मेमोरी कैश के उपयोग को पूर्व-क्लॉड नहीं करता है। हर बार जब एक छोटा संशोधन किया जाता है तो फ़ाइल को वापस लिखना अच्छा प्रदर्शन नहीं करेगा।
  • स्केलेबिलिटी: वास्तव में पहले दो का एक कार्य। किसी भी स्केलेबल लक्ष्यों को प्राप्त करने के लिए आपको लगातार बनाए गए डेटा के छोटे बिट्स को संशोधित करने में सक्षम होना चाहिए। आईडब्ल्यूओ यदि आप डीबी का उपयोग नहीं करते हैं तो आप एक लिखना समाप्त कर देंगे। अगर आपको लगता है कि बढ़ती मांग का समर्थन करने के लिए आपको एक से अधिक वेबसर्वर की आवश्यकता है, तो आप फाइलों को स्टोर करने जा रहे हैं? अब आपके पास नेटवर्क पर फ़ाइल I/O है (संभवतः एक बहुत तेज़ सक्षम)।
  • संरचना: यदि आप किसी सरणी का उपयोग करते हैं तो आपका कोड डेटा की संरचना के प्रबंधन के लिए जिम्मेदार होगा, इसे पूछताछ आदि। डीबी का उपयोग करने से अधिक तरीके से "लचीलापन" किस तरह से किया जाता है? यहां सभी प्रकार के विकल्पों और जटिलता की आवश्यकता है।
  • विश्वसनीयता: आपको अपने बने डेटा की अखंडता सुनिश्चित करने की आवश्यकता है। कुछ विफलता की स्थिति में आपके सरणी/फ़ाइल कोड को यह सुनिश्चित करने की आवश्यकता होगी कि डेटा कम से कम भ्रष्ट नहीं है कि एप्लिकेशन जारी रख सकता है।
+0

धन्यवाद। तो फाइल के मुद्दे क्या हैं? क्या आप एक उदाहरण दे सकते हैं? –

+0

यह वास्तव में महत्वपूर्ण है यदि ये निरंतर मूल्य भी हैं। यदि आप राज्यों (यानी कनेक्टिकट, न्यूयॉर्क, आदि) के बारे में बात कर रहे हैं जो अक्सर नहीं बदलते हैं, तो इन-मेमोरी समाधान बेहतर हो सकता है। * वास्तव में * स्थिति पर निर्भर करता है और आप इसका उपयोग कैसे करेंगे। –

+0

हाय, एंथनी। पोस्ट में भ्रम के लिए खेद है। मैंने कुछ स्पष्टीकरण दिया। तो कुछ मुद्दों को स्पष्ट परिदृश्य में नहीं होगा। सभी को धन्यवाद। –

2

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

+0

धन्यवाद। हम अजगर/django का उपयोग कर रहे हैं। सर्वर प्रारंभ होने के बाद डेटा स्थिर होगा (इसका मतलब है कि हम मैन्युअल रूप से सरणी बदल सकते हैं लेकिन ऐसा अक्सर नहीं होगा)। तो यह एक और सवाल आ सकता है, क्या हम उन सरणी को कैश कर सकते हैं जिन्हें मैंने एक नया प्रश्न बनाया है। http://stackoverflow.com/questions/1680349/do-we-need-cache-for-an-array –

0

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

+0

डीबी को फाइल पसंद करने के बारे में कोई तर्क? चूंकि मैं इतना स्पष्ट नहीं हूं। –

3

चलें हो यादृच्छिक अद्यतन, प्रश्नों, संगामिति नियंत्रण के साथ एक वास्तविक डेटाबेस की जरूरत है व्यावहारिक/objetive:

  • आप क्रम पर आपके डेटा के बारे में क्या है? हां: डीबी, नहीं: फ़ाइल
  • क्या आप प्रति सप्ताह एक से अधिक बार अपना डेटा अपडेट करते हैं? हां: डीबी, नहीं: फ़ाइल
  • एक अद्यतन डेटा फ़ाइल जारी करने के लिए दर्द है? हां: डीबी, नहीं: फ़ाइल,
  • क्या आप अक्सर उस डेटा को पढ़ते हैं? हां: फ़ाइल/कैश, नहीं: डीबी
  • डेटा फ़ाइल को अपडेट करना एक दर्द है और आपको अतिरिक्त टूल्स की आवश्यकता है?हां: डीबी, नहीं: फ़ाइल

निश्चित रूप से मैं अन्य बिंदु भूल गया हूं, लेकिन मुझे लगता है कि मूल बातें हैं।

संबंधित मुद्दे