2009-02-19 10 views
11

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

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

मुझे इस मुद्दे पर विचार करने वाले अन्य अनुभवों से सुनना अच्छा लगेगा, धन्यवाद।

+0

मुझे लगता है कि इस सवाल का अभी भी अत्यधिक देखा जाता है, तो बस अनुप्रयोगों –

उत्तर

17

हमारे पास लंबे समय तक चलने वाले अनुप्रयोगों (जैसे वेब साइट्स और सेवाओं) के लिए डेटाबेस में कॉन्फ़िगरेशन को संग्रहीत करने के साथ बहुत अच्छा अनुभव था। लाभ:

  • आप config दूर से और सुरक्षित रूप से (उपयोगकर्ता/कूटशब्द) संपादित कर सकते हैं
  • यह आसान आवेदन अप परिवर्तन (select max(lmod) from config) स्वचालित रूप से या एक संकेत द्वारा (पिंग एक वेब पेज लेने या एक बनाने के लिए है खाली फ़ाइल कहीं)
  • एप्लिकेशन को प्रति माह कॉन्फ़िगरेशन (देव, परीक्षण, प्रोड) की एक ही वस्तु की आवश्यकता होती है: डीबी का उपयोग करने के लिए। यदि आपके पास कोई एप्लिकेशन सर्वर है, तो आपके एप्लिकेशन सभी वातावरण के लिए कॉन्फ़िगरेशन मुक्त हैं।

मुख्य समस्या संपादन है यदि आपके पास डिफ़ॉल्ट, पदानुक्रमित कॉन्फ़िगरेशन संरचना डिफ़ॉल्ट, सूचियों और विरासत के साथ है।हमारे समाधान:

  • config तालिका इन पंक्तियां हैं: आवेदन varchar (32), कुंजी varchar (512), मूल्य varchar पर्यावरण प्रति (4096)
  • एक डीबी (स्थानीय डेवलपर मशीन, विकास परीक्षण, एकीकरण परीक्षण (option.suboption .... नाम), उत्पादन)
  • कुंजी पदानुक्रमित है
  • चूक का उपयोग "विकल्प। .name" (उदाहरण के लिए, "JDBC। .driver" क्योंकि हम में से केवल एक प्रकार का उपयोग करें डेटाबेस)
  • सूचियाँ, तारों के रूप में जमा हो जाती है न्यू लाइन से अलग कर दिया।
  • मानचित्र स्ट्रिंग्स के रूप में स्टोर हैं, "name = value \ n"
  • एक कार्यान्वयन है जो फ़ाइल (इकाई परीक्षणों के लिए) से कॉन्फ़िगरेशन पढ़ सकता है। किसी तत्व के लिए कुंजी के प्रत्येक पदानुक्रम को मानचित्र करें (......)

कॉन्फ़िगरेशन ऑब्जेक्ट्स इन विवरणों को छुपाएं, इसलिए एप्लिकेशन केवल ऑब्जेक्ट्स के साथ काम करता है।

एक विशेष वर्ग को फिर से पढ़ने एक परिवर्तन के मामले में config लिए जिम्मेदार है। आमतौर पर, हम दिन के दौरान कॉन्फ़िगरेशन को कुछ समय अपडेट करते हैं और एक समय की नौकरी घंटे के बाद इसे फिर से लोड कर देगी। इस तरह, हमें कॉन्फ़िगरेशन विधियों को सिंक्रनाइज़ करने की आवश्यकता नहीं है।

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

+0

समाधान आपके द्वारा दी गई काफी चालाक है। हालांकि एक सवाल, एक्सएमएल को डेटाबेस में सीधे क्यों नहीं स्टोर करें? कॉलम अनुप्रयोग, कुंजी, मान रखने के बजाय कॉलम एप्लिकेशन, XmlConfig है। क्या यह वही चीज़ हासिल नहीं करेगा? – Mas

+2

केवल तभी यदि आपका डीबी एक्सएमएल फ़ाइल पर SELECT और UPDATE जैसे प्रश्न चला सकता है। यदि यह ऐसा नहीं कर सकता है, तो आपको हमेशा पूर्ण एक्सएमएल "डाउनलोड" करना होगा, इसे डीकोड करना होगा, इसे बदलना होगा, पूरी चीज को वापस लिखना होगा। जैसे ही आपकी कॉन्फ़िगरेशन बढ़ती है, यह एक समस्या बन सकती है। –

+0

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

7

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

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

0

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

मूल रूप से अपने प्रश्न (तरह से मैं यह देखें) दो बातें,

  1. क्या प्रारूप config में होना चाहिए (xml, .ini फ़ाइल, आदि)
  2. यह कहाँ संग्रहित किया जाना चाहिए (फ्लैट घुलमिल डिस्क पर फ़ाइल, डेटाबेस में तालिका स्तंभ)

आप आसानी से एक डेटाबेस में config एक्सएमएल फ़ाइल की दुकान और/संपादन के लिए एक इंटरफेस प्रदान की जानकारी प्रदर्शित कर सकते हैं।

+0

मैं मूल रूप से सहमति व्यक्त करते हैं इस तरह के लिए NoSQL विकल्पों की जांच करने के लिए पाठकों का सुझाव चाहते हैं, लेकिन प्रारूप तथा जैसे कभी कभी मिश्रित कर रहे हैं, एक डेटाबेस न केवल एक स्थान लेकिन प्रश्नों के लिए एक सुविधाजनक मध्यम ("मध्यम, संदेश है") –

0

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

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