డేటా మైగ్రేషన్ సిస్టమ్ల పోలిక మరియు ఎంపిక
డెవలప్మెంట్ ప్రక్రియలో డేటా మోడల్ మారుతూ ఉంటుంది మరియు ఏదో ఒక సమయంలో అది డేటాబేస్కు అనుగుణంగా ఉండదు. వాస్తవానికి, డేటాబేస్ తొలగించబడవచ్చు, ఆపై ORM మోడల్కు సరిపోయే కొత్త సంస్కరణను సృష్టిస్తుంది, అయితే ఈ విధానం ఇప్పటికే ఉన్న డేటాను కోల్పోయేలా చేస్తుంది. అందువల్ల, మైగ్రేషన్ సిస్టమ్ యొక్క విధి ఏమిటంటే, స్కీమా మార్పు ఫలితంగా, ఇది ఇప్పటికే ఉన్న డేటాను కోల్పోకుండా అప్లికేషన్లోని డేటా మోడల్తో సమకాలీకరించబడిందని నిర్ధారించడం.
ఈ వ్యాసంలో, మేము డేటాబేస్ మైగ్రేషన్లను నిర్వహించడానికి వివిధ సాధనాలను చూడాలనుకుంటున్నాము. ఇలాంటి ఎంపికను ఎదుర్కొంటున్న డెవలపర్లకు ఈ సమీక్ష ఉపయోగకరంగా ఉంటుందని మేము ఆశిస్తున్నాము.
పని
మా కంపెనీ ప్రస్తుతం తదుపరి తరం ఉత్పత్తిని చురుకుగా అభివృద్ధి చేస్తోంది - డాక్స్ సెక్యూరిటీ సూట్ (DSS). సర్వర్ భాగం .Net కోర్లో వ్రాయబడింది మరియు ఎంటిటీ ఫ్రేమ్వర్క్ కోర్ DBMSగా ఉపయోగించబడుతుంది. అప్లికేషన్ రూపకల్పన చేసేటప్పుడు, మేము కోడ్ ఫస్ట్ విధానాన్ని ఉపయోగిస్తాము.
అప్లికేషన్ డొమైన్ మోడల్ ఒకే సమయంలో అనేక మంది డెవలపర్లచే సృష్టించబడింది - ప్రతి ఒక్కటి సిస్టమ్లోని వారి స్వంత తార్కిక భాగానికి బాధ్యత వహిస్తుంది.
DSS యొక్క మునుపటి తరం క్లాసిక్ ఎంటిటీ ఫ్రేమ్వర్క్ మైగ్రేషన్లను (EF 6) మైగ్రేషన్ మేనేజ్మెంట్ సిస్టమ్గా ఉపయోగించింది. అయినప్పటికీ, దీనికి వ్యతిరేకంగా కొన్ని ఫిర్యాదులు పేరుకుపోయాయి, ప్రధానమైనది సంస్కరణ వైరుధ్యాలను పరిష్కరించడానికి EFకి సరైన విధానం లేదు. మద్దతులో భాగంగా బగ్లను పరిష్కరించేటప్పుడు ఈ వాస్తవం ఇప్పటికీ మమ్మల్ని కలవరపెడుతుంది, కాబట్టి మేము ప్రత్యామ్నాయ ఎంపికలను పరిగణించాలని నిర్ణయించుకున్నాము.
చర్చ ఫలితంగా, మైగ్రేషన్ మేనేజ్మెంట్ సిస్టమ్ కోసం క్రింది అవసరాలు ఏర్పడ్డాయి:
- వివిధ DBMSలకు మద్దతు. MS SQL సర్వర్, PostgreSQL, Oracle అవసరం, కానీ ఇతరులను ఉపయోగించడం సాధ్యమవుతుంది
- ORMతో పని చేస్తున్నారు. ప్రారంభంలో, ఇది EF కోర్ను ఉపయోగించాలని ప్రణాళిక చేయబడింది, కానీ డిజైన్ దశలో మేము ఇతర ORMలను పరిగణనలోకి తీసుకోవడానికి సిద్ధంగా ఉన్నాము
- వలసల స్వయంచాలక ఉత్పత్తి. మొదటి కోడ్ అభివృద్ధిని పరిగణనలోకి తీసుకుని, వలసలను "చేతితో వ్రాయవలసిన" అవసరాన్ని నేను నివారించాలనుకుంటున్నాను
- సంస్కరణ వైరుధ్యాలు. పంపిణీ చేయబడిన అభివృద్ధి వాతావరణంలో, విలీనం అయినప్పుడు, EF కోర్ వైరుధ్యాలతో బాధపడవచ్చు. అప్లికేషన్ యొక్క వివిధ భాగాలు వేర్వేరు డెవలపర్లచే సృష్టించబడినందున ఇది ఒక ముఖ్యమైన సమస్యగా మారుతుంది, కాబట్టి మీరు ప్రతిదానిపై ఎక్కువ సమయం వెచ్చించవలసి ఉంటుంది
- అధునాతన డాక్యుమెంటేషన్ మరియు మద్దతు. ఇక్కడ, మాకు అనిపిస్తుంది, వివరణ అవసరం లేదు
- ఉచిత. ప్రమాణం షరతులతో కూడుకున్నది, ఎందుకంటే సిస్టమ్లు చాలా ఖరీదైనవి లేదా ఖరీదైనవి కావు, కానీ సౌలభ్యం కోసం ఆదర్శవంతమైనది, మేము కూడా పరిగణించడానికి సిద్ధంగా ఉన్నాము
ఒక చిన్న పరిశోధన ఫలితంగా, ఈ క్రింది ఎంపికలు కనుగొనబడ్డాయి మరియు పరిశీలనకు కావాల్సినవిగా గుర్తించబడ్డాయి:
- EF కోర్ వలసలు
- DBup
- రౌండ్హౌస్ ఇ
- థింకింగ్ హోమ్.మైగ్రేటర్
- ఫ్లూయెంట్ మైగ్రేటర్
మరియు ఇప్పుడు కొంచెం వివరంగా
సహజంగానే, ఇది ఎంచుకోవడానికి మొదటి మరియు ప్రధాన ఎంపిక. టాంబురైన్తో ఎటువంటి ఫిడ్లింగ్ లేకుండా బాక్స్ వెలుపల పనిచేసే స్థానిక వాయిద్యం. పెద్ద మొత్తంలో డాక్యుమెంటేషన్, అధికారిక మరియు అలా కాదు, సరళత మొదలైనవి. అయినప్పటికీ, క్లాసిక్ EF గురించి చేసిన ఫిర్యాదులు EF కోర్కి కూడా చాలా సందర్భోచితంగా ఉన్నాయి.
అందువలన, EF కోర్ యొక్క ప్రయోజనాలు హైలైట్ చేయబడ్డాయి:
- Microsoft మద్దతు, డాక్యుమెంటేషన్, రష్యన్, భారీ కమ్యూనిటీతో సహా
- కోడ్ఫస్ట్ ఆధారంగా వలసల స్వయంచాలక ఉత్పత్తి
- EF 6తో పోలిస్తే, EF కోర్ డేటాబేస్ యొక్క స్నాప్షాట్ను నిల్వ చేయదు. కోడ్ ఫస్ట్లో EF కోర్తో పని చేస్తున్నప్పుడు, డేటాబేస్ని అమలు చేయడం ఇకపై అవసరం లేదు
- మేము కోడ్ ఫస్ట్ నుండి డ్యాన్స్ చేస్తున్నందున, అవసరమైన అన్ని డేటా యాక్సెస్ ప్రొవైడర్లకు ఒక మైగ్రేషన్ నిర్వహించడం సాధ్యమవుతుంది
- ప్రొవైడర్లకు సంబంధించి, PostgreSQL మద్దతు ఉంది, ఒరాకిల్ మద్దతు ఉంది, మొదలైనవి, మరియు MS SQL సర్వర్ కూడా
మరియు ప్రతికూలతలు కూడా:
- వివాద పరిష్కారం అదే స్థాయిలో కొనసాగింది. మైగ్రేషన్లను క్రమం చేయడం మరియు డేటాబేస్ స్నాప్షాట్లను నవీకరించడం అవసరం
- వలసలు ఉత్పన్నమయ్యే నమూనాలపై ఆధారపడటం
DbUp
DbUp అనేది .NET లైబ్రరీ, ఇది NuGet ద్వారా ఇన్స్టాల్ చేయబడింది మరియు SQL సర్వర్కి మార్పులను పుష్ చేయడంలో సహాయపడుతుంది. ఇది ఇప్పటికే ఏ మార్పు స్క్రిప్ట్లు అమలు చేయబడిందో ట్రాక్ చేస్తుంది మరియు డేటాబేస్ను నవీకరించడానికి అవసరమైన వాటిని అమలు చేస్తుంది. ASP.NETలో ఓపెన్ సోర్స్ బ్లాగింగ్ ఇంజిన్ కోసం ప్రాజెక్ట్ నుండి లైబ్రరీ అభివృద్ధి చెందింది మరియు MIT లైసెన్స్ క్రింద ఉంది మరియు కోడ్ GitHubలో ఉంది. T-SQLని ఉపయోగించి వలసలు వివరించబడ్డాయి.
ప్రయోజనాలు ఏమిటి:
- పెద్ద సంఖ్యలో DBMS (MS SQL సర్వర్, PstgreSQL, MySQL)కి మద్దతు
- స్క్రిప్ట్లు T-SQLలో వ్రాయబడినందున, అవి చాలా సరళంగా కనిపిస్తాయి
- SQLని ఉపయోగించి వైరుధ్యాలు కూడా పరిష్కరించబడతాయి
మరియు నష్టాలు:
- అన్ని రకాల మద్దతు ఉన్న DBMSలతో, Oracle వాటిలో ఒకటి కాదు
- ORMతో పరస్పర చర్య చేయదు
- T-SQL స్క్రిప్ట్లను చేతితో రాయడం మేము లక్ష్యంగా పెట్టుకున్నది కాదు
- డాక్యుమెంటేషన్ మరియు కమ్యూనిటీ చాలా ఉన్నాయి, అయితే SQL స్క్రిప్ట్లను వ్రాయడం పరంగా అవి అవసరం లేకపోవచ్చు.
రౌండ్హౌస్ ఇ
ఈ మైగ్రేషన్ మేనేజ్మెంట్ టూల్, Apache 2.0 లైసెన్స్ క్రింద పంపిణీ చేయబడింది, ఇది మునుపటిలాగా, T-SQL మైగ్రేషన్ ఇంజిన్పై నడుస్తుంది. స్పష్టంగా, డెవలపర్లు సౌకర్యవంతమైన అభివృద్ధి ప్రక్రియను సృష్టించడం కంటే DBMS మద్దతుకు సంబంధించిన సాంకేతిక సమస్యలను పరిష్కరించడానికి ప్రాధాన్యత ఇచ్చారు.
ప్రోస్:
- అవసరమైన DBMSకి మద్దతు ఇస్తుంది (ఒరాకిల్తో సహా)
కాన్స్:
- Oracle (అలాగే యాక్సెస్, ఇది మాకు అసంబద్ధం) .NET కోర్లో మద్దతు లేదు, కేవలం .NET ఫుల్ ఫ్రేమ్వర్క్లో మాత్రమే
- ORMతో పని చేయదు
- మునుపటి సాధనం కంటే తక్కువ డాక్యుమెంటేషన్ ఉంది
- మళ్ళీ - వలసలు స్క్రిప్ట్ల ద్వారా వ్రాయబడతాయి
థింకింగ్ హోమ్.మైగ్రేటర్
MIT లైసెన్స్ క్రింద పంపిణీ చేయబడిన .NET కోర్ ప్లాట్ఫారమ్కు సంస్కరణ డేటాబేస్ స్కీమా మైగ్రేషన్ కోసం ఒక సాధనం.
ప్రోస్:
- .NET కోర్ కోసం రూపొందించబడింది
- వలసల శాఖల క్రమాన్ని అమలు చేసింది
- మైగ్రేషన్ లాగింగ్ అమలు చేయబడింది
కాన్స్:
- చివరిగా ఒక సంవత్సరం క్రితం నవీకరించబడింది. స్పష్టంగా ప్రాజెక్ట్ మద్దతు లేదు
- Oracle ద్వారా మద్దతు లేదు (ఇది .NET కోర్కి స్థిరమైన అమలు లేకపోవడం వల్లే జరిగిందని కథనం పేర్కొంది - కానీ ఇది ఒక సంవత్సరం క్రితం)
- వలసల ఆటోమేటిక్ జనరేషన్ లేదు
మొత్తంమీద, ప్రాజెక్ట్ ఆశాజనకంగా కనిపిస్తోంది, ప్రత్యేకించి ఇది అభివృద్ధి చెందాలంటే, కానీ మేము ఇక్కడ మరియు ఇప్పుడే నిర్ణయం తీసుకోవాలి.
ఫ్లూయెంట్ మైగ్రేటర్
అభిమానుల పెద్ద సైన్యంతో అత్యంత ప్రజాదరణ పొందిన వలస సాధనం. Apache 2.0 లైసెన్స్ క్రింద పంపిణీ చేయబడింది. వివరణలో పేర్కొన్నట్లుగా, ఇది రూబీ ఆన్ రైల్స్ మైగ్రేషన్ల మాదిరిగానే .NET కోసం మైగ్రేషన్ ఫ్రేమ్వర్క్. డేటాబేస్ స్కీమాకు మార్పులు C# తరగతులలో వివరించబడ్డాయి.
ఇక్కడ ప్రయోజనాలు ఉన్నాయి:
- అవసరమైన DBMS కోసం మద్దతు
- .NET కోర్ మద్దతు
- పెద్ద అభివృద్ధి చెందిన సంఘం
- వలసల మధ్య వైరుధ్యాలు వరుసగా పరిష్కరించబడతాయి-మైగ్రేషన్ల అమలు క్రమం పేర్కొనబడింది. అదనంగా, ఒక ఎంటిటీ చుట్టూ వైరుధ్యం తలెత్తితే, కోడ్ను విలీనం చేసేటప్పుడు, అది మిగిలిన కోడ్లో ఉన్న విధంగానే పరిష్కరించబడుతుంది
- విజయవంతమైన మైగ్రేషన్ తర్వాత అమలు చేయబడిన ప్రొఫైల్లు ఉన్నాయి. మరియు వారు సర్వీస్ ఫంక్షన్లను క్యారీ చేయగలరు. చివరి అప్డేట్ ఒక నెల క్రితం, అంటే ప్రాజెక్ట్ సజీవంగా ఉంది
మైనస్ల విషయానికొస్తే, అవి ఇక్కడ ఉన్నాయి:
- వలసల ఆటోమేటిక్ జనరేషన్ లేదు
- EF మోడల్లతో కనెక్షన్ లేదు
- డేటాబేస్ స్నాప్షాట్లు లేవు
మా ఎంపిక ఏమిటి?
తీవ్రమైన చర్చలు రెండు పారామితుల చుట్టూ తిరిగాయి - స్వయంచాలక వలసలు మరియు వివాదాల యొక్క వివేక పరిష్కారం. ఇతర కారకాలు చాలా తక్కువ భయపెట్టేవి. ఫలితంగా, చర్చ ఫలితాల ఆధారంగా, బృందం కొత్త ప్రాజెక్ట్లో ఫ్లూయెంట్ మైగ్రేటర్ని ఉపయోగించాలని నిర్ణయించుకుంది. ఎందుకంటే భవిష్యత్తులో వివాదాలను పరిష్కరించడం చాలా ఎక్కువ ప్రయోజనాలను తెస్తుంది.
కనుగొన్న
వాస్తవానికి, ఖచ్చితమైన సాధనాలు లేవు. కాబట్టి మేము ఎంపిక చేయడానికి మా "కోరికలు" ప్రాధాన్యత ఇవ్వాలి. అయితే, ఇతర బృందాలు మరియు ఇతర పనులకు, ఇతర అంశాలు నిర్ణయాత్మకంగా ఉండవచ్చు. ఈ వ్యాసం మీకు ఎంపిక చేసుకోవడంలో సహాయపడుతుందని మేము ఆశిస్తున్నాము.
మూలం: www.habr.com