2010-06-03 11 views
6

मेरी कंपनी ने php + mysql का उपयोग कर एक वेब अनुप्रयोग विकसित किया है। सिस्टम उपयोगकर्ता को उत्पाद की मूल कीमत और छूट मूल्य प्रदर्शित कर सकता है। यदि आपने लॉग इन नहीं किया है, तो आप मूल मूल्य प्राप्त करते हैं, अगर आपने लॉग इन किया है, तो आपको छूट की कीमत मिलती है। यह समझना बहुत आसान है।वास्तविक दुनिया में डेटाबेस को "अपग्रेड" कैसे करें?

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

क्या ऐसा करना संभव है? इसके अलावा, भविष्य के लिए सलाह देने के लिए कोई सिफारिश? तुमसे

+0

आप एक ही समय में अपने डेटाबेस और कोड में अपग्रेड रोल करने का समाधान ढूंढ रहे हैं? क्या आपके पास कैशिंग जैसी कुछ "जटिल" है? यदि आप अपनी संपूर्ण साइट को "रखरखाव मोड" में सेट करते हैं, तो वे वर्तमान में लॉग इन नहीं कर सकते हैं - क्या आप अपने SQL ALTER कथन चलाने और एक ही समय में कोड अपलोड करने में सक्षम होंगे? हम कितने आरपीएस बात कर रहे हैं? क्या कोई सुबह के घंटों में कुछ सेकंड का डाउन टाइम नोटिस करेगा? – jlindenbaum

+0

उमूम, मुझे तुम्हारा बिंदु मिल गया ... ... मुझे लगता है कि मैं रखरखाव के लिए सर्वर घंटे का प्रबंध कर सकता हूं – Tattat

उत्तर

0

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

किसी भी ढांचे या ओआरएम विचार के बाहर, एक तेज स्क्रिप्ट मंदी को कम करेगी (या प्रक्रिया बहुत लंबी होने पर डाउनटाइम)।

मेरी राय के लिए, मैं कम से कम इंटरप्टशन समय प्राप्त करने के बजाय, एक दृश्य पृष्ठ के साथ 30sec वेबसाइट पहुंच बाधा को पसंद करना चाहता हूं लेकिन दृश्यमान बग या कोई प्रदर्शन नहीं कर रहा हूं। यदि बाधाओं का समय मायने रखता है, तो रात में या कम यातायात के दौरान यह सबसे अच्छा कर रहा है।

यह सब एक स्क्रिप्ट में किया जा सकता है (या कम से कम एक commande लाइन द्वारा शुरू की), जब हम इस तरह के स्क्रिप्ट हम एक खोल स्क्रिप्ट में शामिल करने के लिए चाहते हैं:

  • स्टैंडबाय में आवेदन डाल (अस्थायी स्थिर पृष्ठ): आप .htaccess रीडायरेक्ट या जो भी आपके ऐप/सर्वर पर्यावरण पर लागू हो सकते हैं।
  • स्रोत कोड और संपत्तियों के उन्नयन के लिए svn udpate (या स्विच)
  • खाली कैश, अस्थायी फ़ाइलों को साफ करना आदि।
  • उत्पन्न वर्गों के पुनर्निर्माण (सिम्फोनी विशिष्ट)
  • ALTER/CREATE TABLE querys साथ उन्नयन डीबी संरचना
  • यदि आवश्यक हो तो, पुरानी संरचना से नई करने के लिए डेटा को स्थानांतरित: क्या आप संरचना पर बदल के आधार पर, यह पहले डेटा प्राप्त करने में आवश्यकता हो सकती है डीबी संरचना में परिवर्तन, या टीएमपी टेबल का उपयोग करें।
  • यदि सब ठीक हो गए, तो अस्थायी पृष्ठ हटा दें। अपग्रेड
  • अगर कुछ गलत हो गया तो ऑपरेटर को एक लाल संदेश प्रदर्शित करता है ताकि यह देख सके कि क्या हुआ, इसे ठीक करने का प्रयास करें और फिर प्रतीक्षा पृष्ठ को हाथ से हटा दें।

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

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

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

अन्य बेहतर समाधान हो सकते हैं, लेकिन मूल रूप से मैं इसका उपयोग करता हूं और यह हमारे लिए काम करता है। बड़ी कमी यह है कि प्रत्येक प्रमुख रिलीज पर इस तरह की लिपि को फिर से लिखा जाना था, इससे मुझे ऐसा करने के लिए अन्य विकल्पों की खोज करने की उत्तेजना होती है, लेकिन कौन सा ??? अगर कोई यहां बेहतर और सरल विकल्प था तो मुझे खुशी होगी।

1

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

यहाँ ALTER तालिका के और अधिक ठोस उदाहरण हैं।
http://php.about.com/od/learnmysql/p/alter_table.htm

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

1

मैं आपके डेटाबेस में SQL क्वेरी चलाने के लिए एक टूल लिखने की अनुशंसा करता हूं। रेल माइग्रेशन की तरह।

सिस्टम में मैं वर्तमान में काम कर रहा हूं, हमारे पास पाइथन में लिखा गया टूल है, हम 00600_somename.sql जैसे हमारी स्क्रिप्ट का नाम देते हैं, जहां 0s हमारे एससीएम (उपवर्तन) में संशोधन संख्या है, और उपकरण चलाया जाता है विकास/परीक्षण के हिस्से के रूप में और अंत में उत्पादन के लिए तैनाती।

डेटाबेस परिवर्तनों के संदर्भ में समय पर वापस जाने में सक्षम होने का लाभ है, कोड में जैसे (यदि आप स्रोत कोड संस्करण नियंत्रण उपकरण का उपयोग करते हैं) भी।

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