इस लेख में, हम फ्लाईवे और लिक्विबेस के बारे में बात करेंगे, जो दो सबसे लोकप्रिय जावा-आधारित डेटाबेस रीफैक्टरिंग टूल हैं। लेख का उद्देश्य इन उपकरणों की तुलना करना और यह पता लगाना है कि कौन से मामलों में उपयोग करना बेहतर है।

flyway
फ्लाईवे अवधारणा स्वचालित डेटाबेस रीफैक्टरिंग और वर्जनिंग का समर्थन करने के लिए लगभग छह अलग-अलग टीमों में केंद्रित है। इन आदेशों को कमांड लाइन से बनाया जा सकता है, निर्माण प्रक्रिया के दौरान (मावेन या ग्रैडल का उपयोग करके), या एपीआई कॉल का उपयोग करके सीधे जावा कोड से। इन आदेशों को निष्पादित करते समय, आपको डेटाबेस (url, उपयोगकर्ता नाम, पासवर्ड) से कनेक्ट करने के लिए पैरामीटर प्रदान करने की आवश्यकता होती है जिसे आप रिफलेक्टर करना चाहते हैं।
मुख्य कमांड को migrate
कहा जाता है और एक फ़ंक्शन करता है जिसमें डेटाबेस रिफ्लेक्टरिंग का पूरा सार होता है: यह एसक्यूएल स्क्रिप्ट के साथ एक विशेष फ़ोल्डर को स्कैन करता है (जिनमें से प्रत्येक का फ़ाइल नाम में एक संस्करण संख्या है) और यह जांचता है कि उनमें से कौन सा लक्ष्य डेटाबेस पर पहले ही लागू हो चुका है। फिर यह उन लोगों को निष्पादित करता है जो अभी तक इस डेटाबेस पर लागू नहीं हुए हैं। एक संघर्ष की स्थिति में, उदाहरण के लिए, यदि एक स्क्रिप्ट जो पहले से ही लागू हो चुकी है जब से इसका उपयोग किया गया है, तो फ्लाईवे एक त्रुटि संदेश के साथ इसके संचालन को बाधित करता है।
फ्लाईवे की एक अनूठी विशेषता यह है कि माइग्रेशन स्क्रिप्ट न केवल SQL प्रारूप में हो सकती है, बल्कि जावा कोड के रूप में भी हो सकती है। दूसरा विकल्प आपको जटिल तर्क के साथ गतिशील पलायन को लागू करने की अनुमति देता है। हालाँकि, आपको सावधानी के साथ जावा दृष्टिकोण का उपयोग करना चाहिए, क्योंकि ऐसी माइग्रेशन स्क्रिप्ट आमतौर पर डिबग करना मुश्किल होता है अगर उनके साथ कुछ गलत हुआ।
मुख्य migrate
कमांड के अलावा, फ्लाईवे में अतिरिक्त कमांड हैं जो डेटाबेस रीफैक्टरिंग की प्रक्रिया को सुविधाजनक बनाते हैं।
info
आदेश किसी दिए गए फ़ोल्डर से सभी उपलब्ध माइग्रेशन स्क्रिप्ट को दिखाता है और नोट करता है कि उनमें से कौन सा पहले से ही उपयोग किया गया है और कौन सा केवल लक्ष्य डेटाबेस पर लागू होगा।
यह जांचने के लिए कि क्या डेटाबेस पर लागू स्क्रिप्ट बदल गई है, validate
कमांड का उपयोग किया जाता है। यह जानना हमारे लिए उपयोगी है कि डेटाबेस से लागू होने के बाद से फ़ोल्डर में पहले से लागू स्क्रिप्ट को बदल दिया गया है, क्योंकि इसका मतलब यह हो सकता है कि स्क्रिप्ट को अलग-अलग संस्करणों में अलग-अलग डेटाबेस में लागू किया गया था, और यह समस्या पैदा कर सकता है।
यदि आपको लगता है कि मान्य कमांड द्वारा दिखाए गए विफलता के बावजूद स्क्रिप्ट का उपयोग किया जाना चाहिए, तो आप मरम्मत कमांड चला सकते हैं। यह फ्लाईवे द्वारा उपयोग की जाने वाली डेटाबेस तालिका को रिकॉर्ड करने के लिए रीसेट करेगा जो स्क्रिप्ट पहले ही लागू की गई हैं (डिफ़ॉल्ट रूप से इस तालिका को SCHEMA_VERSON कहा जाता है)।
और अंतिम, लेकिन कोई कम महत्वपूर्ण नहीं, clean
कमान पूरी तरह से चयनित योजना को साफ करता है (जैसा कि आप जानते हैं, इस आदेश का उपयोग केवल परीक्षण डेटाबेस के लिए किया जाना चाहिए)।
Liquibase
Liquibase डेटाबेस रीफ़ैक्टरिंग को लागू करने के लिए एक अलग दृष्टिकोण लेता है। फ्लाईवे के विपरीत, जो केवल एसक्यूएल और जावा प्रारूपों में माइग्रेशन स्क्रिप्ट का समर्थन करता है, लिक्विबेस आपको एसक्यूएल से सार करने की अनुमति देता है और इस प्रकार इसके विशिष्ट कार्यान्वयन से डेटाबेस को हटाने से हटा देता है।
SQL स्क्रिप्ट के बजाय, लिक्विबेस XML, YAML और JSON प्रारूपों में माइग्रेशन स्क्रिप्ट का समर्थन करता है। इन लिपियों में, आप डेटाबेस में परिवर्तन को अमूर्त स्तर पर परिभाषित करते हैं। प्रत्येक परिवर्तन के लिए, लिक्विबेस में XML, YAML और JSON में एक संबंधित तत्व है। उदाहरण के लिए, एक परिवर्तन जो YAML प्रारूप में एक नया डेटाबेस तालिका बनाता है वह इस प्रकार है:
createTable: tableName: Customer columns: - column: name: name type: varchar(255) - column: name: address type: varchar(255)
add column
, create index
या alter table
और अन्य जैसे परिवर्तन समान दिखते हैं।
ऑपरेशन के दौरान, लिकिबेस स्वचालित रूप से उन सभी लिपियों को लागू करता है जो अभी तक उपयोग नहीं किए गए हैं, और फ्लाईवे की तरह, एक विशेष डेटाबेस तालिका में अपने मेटाडेटा को बचाता है। फ्लाईवे की तरह, लिक्विबेस को बिल्ड टूल्स की कमांड लाइन से या सीधे इसके जावा एपीआई के माध्यम से मंगाया जा सकता है।
उनका उपयोग कब करें?
फ्लाईवे और लिक्विबेस दोनों पेशेवर डेटाबेस रीफैक्टरिंग और वर्जनिंग के लिए आवश्यक सभी कार्यों का समर्थन करते हैं, इसलिए आपको हमेशा पता रहेगा कि आप किस डेटाबेस स्कीमा के साथ काम कर रहे हैं और यह आपके सॉफ़्टवेयर के संस्करण से मेल खाता है या नहीं। दोनों उपकरण मावेन और ग्रैडल के साथ और स्प्रिंग बूट पारिस्थितिकी तंत्र में एकीकृत हैं, इसलिए डेटाबेस रीफैक्टरिंग को पूरी तरह से स्वचालित किया जा सकता है।
फ्लाईवे डेटाबेस परिवर्तनों को पहचानने के लिए एसक्यूएल का उपयोग करता है, इसलिए आप अपने प्रोजेक्ट पर विशिष्ट प्रकार के डेटाबेस के साथ प्रभावी ढंग से काम करने के लिए एसक्यूएल स्क्रिप्ट को कॉन्फ़िगर कर सकते हैं, जैसे ओरेकल या पोस्टग्रेक्यूएल। दूसरी ओर, लिक्विबेस ने डेटाबेस परिवर्तनों का पता लगाने के लिए एक्सएमएल, यिमल, या जेएसएन का उपयोग करके एब्सट्रैक्शन का एक अतिरिक्त स्तर पेश किया है। इस प्रकार, लिक्विबेस सॉफ्टवेयर के लिए बेहतर अनुकूल है जिसे विभिन्न प्रकार के डेटाबेस सर्वरों के साथ अलग-अलग वातावरण में स्थापित करने की आवश्यकता होती है। हालाँकि, यदि आपको अपने एसक्यूएल पर पूर्ण नियंत्रण की आवश्यकता है, तो फ्लाईवे आपकी पसंद है, क्योंकि यह आपको डेटाबेस को पूरी तरह से कस्टम एसक्यूएल का उपयोग करके या यहां तक कि जावा कोड का उपयोग करके संशोधित करने की अनुमति देता है।
दोनों उपकरणों के साथ पकड़ यह है कि वे एक व्यक्ति (अनुवादक से: लेखक के अनुसार) द्वारा समर्थित हैं, और एक बड़ी टीम द्वारा नहीं। इससे दोनों उपकरणों के भविष्य के विकास पर नकारात्मक प्रभाव पड़ सकता है, लेकिन यह आवश्यक नहीं है। इस लेखन के समय, फ्लाईवे गिटहब रिपॉजिटरी में गतिविधि लिलीबैज़ रिपॉजिटरी की तुलना में अधिक है ।