2015-11-18 5 views
8

मेरे कार्यालय में एक पैकेज बनाने के बारे में बात की गई है जो संस्करण को MySQL डेटा (स्कीमा/माइग्रेशन नहीं) नियंत्रित करेगा।वर्जनिंग माइस्क्ल डेटा (न सिर्फ स्कीमा)

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

जब इसे विलय करते समय हुड के तहत लाइव और "नए उपयोगकर्ता" शाखाओं को एक एसक्यूएल फ़ाइल में निर्यात किया जाएगा और एक एसवीएन diff करें और परिवर्तनों को मर्ज करें।

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

यदि ग्राहक एक देव/डेमो साइट पर काम करता है तो वे काम करते हैं जो वे लाइव रखना चाहते हैं।

मैं समझने के लिए चर्चा खोलना चाहता था कि यह भी एक अच्छा विचार है? हम किस समस्या में भाग सकते हैं? क्या डेटा के साथ काम करते समय यह एक अच्छा प्रोग्रामिंग अभ्यास है? क्या ऐसा कुछ पहले से मौजूद है?

+0

यह ऐसा कुछ नहीं है जो सिद्धांत की स्कीमा के समान है: अद्यतन फ़ंक्शन करता है? यह svn या git का उपयोग करके किसी भी खिंचाव से नहीं है लेकिन यह आपको विकास डेटाबेस का उपयोग करने और आपके एसक्यूएल में परिवर्तन करने की अनुमति देता है और डेटा खोए बिना डेटाबेस में परिवर्तन करता है। –

उत्तर

3

डेटाबेस (विशेष रूप से उनके डेटा) को शायद ही कभी एक संस्करण नियंत्रण प्रणाली में संग्रहीत किया जाता है क्योंकि यह बड़े डेटाबेस के लिए अच्छी तरह से स्केल नहीं करता है।

आपके मामले में, आप नहीं भी ज्यादा डेटा है, तो यह है कि काम कर सकता था, विशेष रूप से एक mysqldump can produce a delimited text format के बाद से

मैं अभी भी एक अलग Git रेपो की सिफारिश करेंगे (जो पिछले संस्करण के खिलाफ diff के लिए एक मौका है) और स्कीमा और डेटा दोनों परिवर्तनों को प्रबंधित करने के लिए एक समर्पित उपकरण। उदाहरण के लिए, LiquidBase "आपके डेटाबेस के लिए स्रोत नियंत्रण" प्रदान कर सकता है।
आपके पास समर्पित समर्पित डेटाबेस के रूप में भी है: off-scale

यदि आप इसे मैन्युअल रूप से करना चाहते हैं, तो आपके पास "Recipes for Continuous Database Integration" में सारांशित अच्छे अभ्यास हैं।

mentioned here के रूप में, यहां तक ​​कि स्कीमा के लिए:

मैं कठिन रास्ता है कि आवेदन करने वाले डेटाबेस स्कीमा परिवर्तन मज़बूती से एक व्यापक कदम-दर-कदम योजना के बिना नहीं किया जा सकता है और इसी तरह, रिश्ते निर्भरता के आदेश हैं सीखा जरूरी।
बस "वर्तमान" या "अंत" स्कीमा संग्रहित करना पर्याप्त नहीं है। ऐसे कई बदलाव हैं जिन्हें को A->B->C जानने के बिना पूर्ववत रूप से लागू नहीं किया जा सकता है और कुछ परिवर्तन B में माइग्रेशन तर्क या सुधार शामिल हो सकते हैं।

1

बस निम्नलिखित के रूप में के रूप में अपनी आवश्यकताओं है:

  • एक ही बैक-एंड कोड;
  • लाइव में मास्टर डेटा का उपयोग करें;
  • अंतिम उपयोगकर्ता (या समूह) अलग डेटा पर काम करने के लिए;
  • कोई माइग्रेशन नहीं, अंतिम उपयोगकर्ता केवल डेटा (डीएमएल) को संशोधित कर सकते हैं, और स्कीमा (डीडीएल) को संशोधित करने की अनुमति नहीं है;

यदि ये आवश्यकताएं हैं, तो आप एकाधिक डेटाबेस का उपयोग कर सकते हैं। एक MySQL सर्वर में निम्नलिखित डेटाबेस पर विचार करें:

  • masterdb
  • branch_demo
  • branch_brian
  • branch_sandbox
  • ...

ये डेटाबेस में ठीक उसी स्कीमा का हिस्सा है, और केवल डेटा अलग है। प्रत्येक शाखा में, हम एक विशेष तालिका है (यानी dbinfo), माता पिता शाखा का ट्रैक अन्य विवरण रखने के लिए (शायद masterdb), दिनांक बनाने, और, पहुँच स्तर के तरह, आदि

  • आईडी
  • BRANCHNAME
  • parent_branch
  • created_on
  • lastmod_on

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

  • एक नई शाखा बनाना, डेटाबेस को क्लोन करने जितना आसान होगा;
  • मास्टर के लिए एक नई शाखा विलय करना, MySQL में REPLACE कथन का उपयोग करके संभाला जा सकता है;

यदि आप डेटा में परिवर्तनों का ट्रैक रखना चाहते हैं, तो आप गतिविधियों को लॉग इन करने के लिए एक विशेष तालिका बना सकते हैं।

+0

क्या आप मेरे एसक्यूएल में शाखाओं की सामग्री दिखाने वाले किसी भी ट्यूटोरियल को साझा कर सकते हैं क्योंकि आप बस एक सीपेट डेटाबेस में संरचना क्लोनिंग कर रहे हैं या आपका मतलब कुछ अलग है? –

+0

एक seaprate डेटाबेस में संरचना क्लोनिंग –

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