స్కీమాకీపర్‌తో డేటాబేస్‌లో వ్యాపార తర్కం

ఈ వ్యాసం యొక్క ఉద్దేశ్యం లైబ్రరీ యొక్క ఉదాహరణను ఉపయోగించడం స్కీమా-కీపర్ PostgreSQL DBMSని ఉపయోగించి PHP ప్రాజెక్ట్‌లలో డేటాబేస్‌లను అభివృద్ధి చేసే ప్రక్రియను గణనీయంగా సులభతరం చేసే సాధనాలను చూపుతుంది.

ఈ కథనంలోని సమాచారం, మొదటగా, PostgreSQL సామర్థ్యాలను ఎక్కువగా ఉపయోగించాలనుకునే డెవలపర్‌లకు ఉపయోగకరంగా ఉంటుంది, కానీ డేటాబేస్‌లో ఉంచబడిన వ్యాపార లాజిక్‌ను నిర్వహించడంలో సమస్యలను ఎదుర్కొంటుంది.

ఈ కథనం డేటాబేస్‌లో వ్యాపార లాజిక్‌ను నిల్వ చేయడం వల్ల కలిగే ప్రయోజనాలు లేదా అప్రయోజనాలను వివరించదు. ఇది ఇప్పటికే రీడర్ ద్వారా ఎంపిక చేయబడిందని భావించబడుతుంది.

కింది ప్రశ్నలు పరిగణించబడతాయి:

  1. డేటాబేస్ స్ట్రక్చర్ డంప్‌ను వెర్షన్ కంట్రోల్ సిస్టమ్‌లో ఏ రూపంలో నిల్వ చేయాలి (ఇకపై VCSగా సూచిస్తారు)
  2. డంప్‌ను సేవ్ చేసిన తర్వాత డేటాబేస్ నిర్మాణంలో మార్పులను ఎలా ట్రాక్ చేయాలి
  3. వైరుధ్యాలు మరియు పెద్ద మైగ్రేషన్ ఫైల్‌లు లేకుండా డేటాబేస్ నిర్మాణంలో మార్పులను ఇతర పరిసరాలకు ఎలా బదిలీ చేయాలి
  4. అనేక డెవలపర్‌లచే ప్రాజెక్ట్‌పై సమాంతర పని ప్రక్రియను ఎలా నిర్వహించాలి
  5. ఉత్పత్తి వాతావరణంలో డేటాబేస్ నిర్మాణంలో మరిన్ని మార్పులను సురక్షితంగా ఎలా అమలు చేయాలి

    స్కీమాకీపర్ భాషలో వ్రాసిన నిల్వ విధానాలతో పని చేయడానికి రూపొందించబడింది PL/pgSQL. ఇతర భాషలతో పరీక్ష నిర్వహించబడలేదు, కాబట్టి ఉపయోగం అంత ప్రభావవంతంగా ఉండకపోవచ్చు లేదా సాధ్యం కాకపోవచ్చు.

VCSలో డేటాబేస్ స్ట్రక్చర్ డంప్‌ను ఎలా నిల్వ చేయాలి

గ్రంధాలయం స్కీమా-కీపర్ ఒక ఫంక్షన్ అందిస్తుంది saveDump, ఇది డేటాబేస్ నుండి అన్ని వస్తువుల నిర్మాణాన్ని ప్రత్యేక టెక్స్ట్ ఫైల్‌లుగా సేవ్ చేస్తుంది. అవుట్‌పుట్ అనేది డేటాబేస్ నిర్మాణాన్ని కలిగి ఉన్న డైరెక్టరీ, ఇది VCSకి సులభంగా జోడించబడే సమూహ ఫైల్‌లుగా విభజించబడింది.

అనేక ఉదాహరణలను ఉపయోగించి డేటాబేస్ నుండి వస్తువులను ఫైల్‌లుగా మార్చడాన్ని చూద్దాం:

ఆబ్జెక్ట్ రకం
పథకం
పేరు
ఫైల్ చేయడానికి సంబంధిత మార్గం

పట్టిక
ప్రజా
ఖాతాల
./public/tables/accounts.txt

నిల్వ విధానం
ప్రజా
auth (హాష్ బిగింట్)
./public/functions/auth(int8).sql

ఆలోచన
బుకింగ్
సుంకాలు
./booking/views/tariffs.txt

ఫైల్స్ యొక్క కంటెంట్‌లు నిర్దిష్ట డేటాబేస్ ఆబ్జెక్ట్ యొక్క నిర్మాణం యొక్క వచన ప్రాతినిధ్యం. ఉదాహరణకు, నిల్వ చేయబడిన విధానాల కోసం, ఫైల్ యొక్క కంటెంట్‌లు బ్లాక్‌తో ప్రారంభించి, నిల్వ చేయబడిన ప్రక్రియ యొక్క పూర్తి నిర్వచనంగా ఉంటాయి. CREATE OR REPLACE FUNCTION.

పై పట్టిక నుండి చూడగలిగినట్లుగా, ఫైల్‌కు మార్గం వస్తువు యొక్క రకం, స్కీమా మరియు పేరు గురించి సమాచారాన్ని నిల్వ చేస్తుంది. ఈ విధానం డేటాబేస్లో మార్పుల యొక్క డంప్ మరియు కోడ్ సమీక్ష ద్వారా నావిగేట్ చేయడాన్ని సులభతరం చేస్తుంది.

పొడిగింపు .sql నిల్వ చేయబడిన విధానం సోర్స్ కోడ్‌తో ఉన్న ఫైల్‌ల కోసం, ఇది ఎంపిక చేయబడింది, తద్వారా ఫైల్ తెరవబడినప్పుడు డేటాబేస్‌తో పరస్పర చర్య చేయడానికి IDE స్వయంచాలకంగా సాధనాలను అందిస్తుంది.

డంప్‌ను సేవ్ చేసిన తర్వాత డేటాబేస్ నిర్మాణంలో మార్పులను ఎలా ట్రాక్ చేయాలి

VCSలో ప్రస్తుత డేటాబేస్ నిర్మాణం యొక్క డంప్‌ను సేవ్ చేయడం ద్వారా, డంప్ సృష్టించబడిన తర్వాత డేటాబేస్ నిర్మాణంలో మార్పులు చేశారో లేదో తనిఖీ చేసే అవకాశాన్ని మేము పొందుతాము. లైబ్రరీలో స్కీమా-కీపర్ డేటాబేస్ నిర్మాణంలో మార్పులను గుర్తించడానికి, ఒక ఫంక్షన్ అందించబడుతుంది verifyDump, ఇది దుష్ప్రభావాలు లేకుండా తేడాల గురించి సమాచారాన్ని అందిస్తుంది.

తనిఖీ చేయడానికి ప్రత్యామ్నాయ మార్గం ఫంక్షన్‌కు మళ్లీ కాల్ చేయడం saveDump, అదే డైరెక్టరీని పేర్కొంటూ, మార్పుల కోసం VCSలో తనిఖీ చేయండి. డేటాబేస్ నుండి అన్ని వస్తువులు ప్రత్యేక ఫైల్‌లలో సేవ్ చేయబడినందున, VCS మార్చబడిన వస్తువులను మాత్రమే చూపుతుంది.
ఈ పద్ధతి యొక్క ప్రధాన ప్రతికూలత ఏమిటంటే, మార్పులను చూడటానికి ఫైల్‌లను ఓవర్‌రైట్ చేయాల్సిన అవసరం ఉంది.

వైరుధ్యాలు మరియు పెద్ద మైగ్రేషన్ ఫైల్‌లు లేకుండా డేటాబేస్ నిర్మాణంలో మార్పులను ఇతర పరిసరాలకు ఎలా బదిలీ చేయాలి

ఫంక్షన్‌కి ధన్యవాదాలు deployDump నిల్వ చేయబడిన విధానాల సోర్స్ కోడ్ సాధారణ అప్లికేషన్ సోర్స్ కోడ్ వలె సరిగ్గా అదే విధంగా సవరించబడుతుంది. మీరు నిల్వ చేసిన విధానం కోడ్‌లో కొత్త లైన్‌లను జోడించవచ్చు/తొలగించవచ్చు మరియు వెంటనే సంస్కరణ నియంత్రణకు మార్పులను పుష్ చేయవచ్చు లేదా డంప్ డైరెక్టరీలో సంబంధిత ఫైల్‌లను సృష్టించడం/తొలగించడం ద్వారా నిల్వ చేయబడిన విధానాలను సృష్టించడం/తొలగించడం చేయవచ్చు.

ఉదాహరణకు, స్కీమాలో కొత్త నిల్వ చేయబడిన విధానాన్ని రూపొందించడానికి public పొడిగింపుతో కొత్త ఫైల్‌ను సృష్టించండి .sql డైరెక్టరీలో public/functions, బ్లాక్‌తో సహా నిల్వ చేయబడిన విధానం యొక్క సోర్స్ కోడ్‌ను అందులో ఉంచండి CREATE OR REPLACE FUNCTION, అప్పుడు ఫంక్షన్ కాల్ deployDump. నిల్వ చేసిన విధానాన్ని సవరించడం మరియు తొలగించడం అదే విధంగా జరుగుతుంది. అందువలన, కోడ్ VCS మరియు డేటాబేస్ రెండింటికీ ఒకే సమయంలో వెళుతుంది.

ఏదైనా నిల్వ చేయబడిన విధానం యొక్క సోర్స్ కోడ్‌లో లోపం కనిపించినట్లయితే లేదా ఫైల్ పేర్లు మరియు నిల్వ చేయబడిన విధానం మధ్య వ్యత్యాసం కనిపించినట్లయితే, అప్పుడు deployDump విఫలమవుతుంది, లోపం వచనాన్ని ప్రదర్శిస్తుంది. ఉపయోగిస్తున్నప్పుడు డంప్ మరియు ప్రస్తుత డేటాబేస్ మధ్య నిల్వ చేయబడిన విధానాల అసమతుల్యత అసాధ్యం deployDump.

కొత్త నిల్వ చేయబడిన విధానాన్ని సృష్టించేటప్పుడు, సరైన ఫైల్ పేరును మాన్యువల్‌గా నమోదు చేయవలసిన అవసరం లేదు. ఫైల్‌కు పొడిగింపు ఉంటే సరిపోతుంది .sql. కాల్ తర్వాత deployDump లోపం టెక్స్ట్ సరైన పేరును కలిగి ఉంటుంది, ఇది ఫైల్ పేరు మార్చడానికి ఉపయోగించబడుతుంది.

deployDump అదనపు చర్యలు లేకుండా ఫంక్షన్ లేదా రిటర్న్ రకం యొక్క పారామితులను మార్చడానికి మిమ్మల్ని అనుమతిస్తుంది, అయితే క్లాసికల్ విధానంతో మీరు చేయాల్సి ఉంటుంది
ముందుగా అమలు చేయండి DROP FUNCTION, మరియు అప్పుడు మాత్రమే CREATE OR REPLACE FUNCTION.

దురదృష్టవశాత్తు, అక్కడ కొన్ని పరిస్థితులు ఉన్నాయి deployDump మార్పులను స్వయంచాలకంగా వర్తింపజేయడం సాధ్యం కాదు. ఉదాహరణకు, కనీసం ఒక ట్రిగ్గర్ ఉపయోగించిన ట్రిగ్గర్ ఫంక్షన్ తీసివేయబడితే. ఇటువంటి పరిస్థితులు మైగ్రేషన్ ఫైల్‌లను ఉపయోగించి మానవీయంగా పరిష్కరించబడతాయి.

నిల్వ చేసిన విధానాలకు మార్పులను తరలించడానికి మీరు బాధ్యత వహిస్తే స్కీమా-కీపర్, అప్పుడు నిర్మాణంలో ఇతర మార్పులను బదిలీ చేయడానికి మైగ్రేషన్ ఫైల్‌లను తప్పనిసరిగా ఉపయోగించాలి. ఉదాహరణకు, వలసలతో పని చేయడానికి మంచి లైబ్రరీ సిద్ధాంతం/వలసలు.

ప్రయోగానికి ముందు వలసలు తప్పనిసరిగా వర్తింపజేయాలి deployDump. ఇది నిర్మాణంలో అన్ని మార్పులను చేయడానికి మరియు సమస్యాత్మక పరిస్థితులను పరిష్కరించడానికి మిమ్మల్ని అనుమతిస్తుంది, తద్వారా నిల్వ చేసిన విధానాలలో మార్పులు సమస్యలు లేకుండా బదిలీ చేయబడతాయి.

వలసలతో పని చేయడం క్రింది విభాగాలలో మరింత వివరంగా వివరించబడుతుంది.

అనేక డెవలపర్‌లచే ప్రాజెక్ట్‌పై సమాంతర పని ప్రక్రియను ఎలా నిర్వహించాలి

డేటాబేస్ యొక్క పూర్తి ప్రారంభానికి ఒక స్క్రిప్ట్‌ను రూపొందించడం అవసరం, ఇది డెవలపర్ తన పని యంత్రంలో ప్రారంభించబడుతుంది, VCSలో సేవ్ చేయబడిన డంప్‌కు అనుగుణంగా స్థానిక డేటాబేస్ యొక్క నిర్మాణాన్ని తీసుకువస్తుంది. స్థానిక డేటాబేస్ యొక్క ప్రారంభాన్ని 3 దశలుగా విభజించడం సులభమయిన మార్గం:

  1. ఉదా. అని పిలువబడే ప్రాథమిక నిర్మాణంతో ఫైల్‌ను దిగుమతి చేయండి. base.sql
  2. వలసలను వర్తింపజేయడం
  3. కాల్ deployDump

base.sql మైగ్రేషన్‌లు వర్తింపజేయబడిన మరియు అమలు చేయబడిన ప్రారంభ స్థానం deployDump, అంటే base.sql + миграции + deployDump = актуальная структура БД. మీరు యుటిలిటీని ఉపయోగించి అటువంటి ఫైల్‌ను సృష్టించవచ్చు pg_dump. ఉపయోగించబడిన base.sql స్క్రాచ్ నుండి డేటాబేస్ను ప్రారంభించేటప్పుడు ప్రత్యేకంగా.

పూర్తి డేటాబేస్ ప్రారంభించడం కోసం స్క్రిప్ట్‌ని పిలుద్దాం refresh.sh. వర్క్‌ఫ్లో ఇలా ఉండవచ్చు:

  1. డెవలపర్ తన వాతావరణంలో ప్రారంభించాడు refresh.sh మరియు ప్రస్తుత డేటాబేస్ నిర్మాణాన్ని పొందుతుంది
  2. డెవలపర్ కొత్త ఫంక్షనాలిటీ (ALTER TABLE ... ADD COLUMN మొదలైనవి)
  3. పనిని పూర్తి చేసిన తర్వాత, డెవలపర్ ఫంక్షన్‌ని పిలుస్తాడు saveDumpVCSలో డేటాబేస్‌కు చేసిన మార్పులను చేయడానికి
  4. డెవలపర్ పునఃప్రారంభం refresh.shఅప్పుడు verifyDumpఇది ఇప్పుడు మైగ్రేషన్‌లో చేర్చవలసిన మార్పుల జాబితాను చూపుతుంది
  5. డెవలపర్ అన్ని నిర్మాణ మార్పులను మైగ్రేషన్ ఫైల్‌కు బదిలీ చేస్తాడు, మళ్లీ అమలు చేస్తాడు refresh.sh и verifyDump, మరియు, మైగ్రేషన్ సరిగ్గా కంపైల్ చేయబడితే, verifyDump స్థానిక డేటాబేస్ మరియు సేవ్ చేయబడిన డంప్ మధ్య తేడాలు చూపవు

పైన వివరించిన ప్రక్రియ gitflow సూత్రాలకు అనుకూలంగా ఉంటుంది. VCSలోని ప్రతి బ్రాంచ్ దాని స్వంత డంప్ వెర్షన్‌ను కలిగి ఉంటుంది మరియు శాఖలను విలీనం చేసినప్పుడు, డంప్‌లు విలీనం చేయబడతాయి. చాలా సందర్భాలలో, విలీనం తర్వాత అదనపు చర్య తీసుకోవలసిన అవసరం లేదు, కానీ వివిధ శాఖలలో మార్పులు చేసినట్లయితే, ఉదాహరణకు, ఒకే పట్టికలో, వివాదం తలెత్తవచ్చు.

ఒక ఉదాహరణను ఉపయోగించి సంఘర్షణ పరిస్థితిని పరిశీలిద్దాం: ఒక శాఖ ఉంది అభివృద్ధి, దీని నుండి రెండు శాఖలు శాఖలు: ఫీచర్ 1 и ఫీచర్ 2, వీటితో విభేదాలు లేవు అభివృద్ధి, కానీ ఒకరితో ఒకరు విభేదాలు కలిగి ఉంటారు. రెండు శాఖలను విలీనం చేయడమే పని అభివృద్ధి. ఈ సందర్భంలో, మొదట శాఖలలో ఒకదానిని విలీనం చేయాలని సిఫార్సు చేయబడింది అభివృద్ధిఆపై విలీనం అభివృద్ధి మిగిలిన శాఖకు, మిగిలిన శాఖలోని వైరుధ్యాలను పరిష్కరించడం, ఆపై చివరి శాఖను విలీనం చేయడం అభివృద్ధి. సంఘర్షణ పరిష్కార దశలో, మీరు చివరి బ్రాంచ్‌లోని మైగ్రేషన్ ఫైల్‌ను పరిష్కరించాల్సి రావచ్చు, తద్వారా అది విలీనాల ఫలితాలను కలిగి ఉన్న తుది డంప్‌తో సరిపోలుతుంది.

ఉత్పత్తి వాతావరణంలో డేటాబేస్ నిర్మాణంలో మరిన్ని మార్పులను సురక్షితంగా ఎలా అమలు చేయాలి

VCSలో ప్రస్తుత డేటాబేస్ నిర్మాణం యొక్క డంప్ ఉనికికి ధన్యవాదాలు, అవసరమైన నిర్మాణంతో ఖచ్చితమైన సమ్మతి కోసం ఉత్పత్తి డేటాబేస్ను తనిఖీ చేయడం సాధ్యమవుతుంది. డెవలపర్లు ఉద్దేశించిన అన్ని మార్పులు విజయవంతంగా ఉత్పత్తి స్థావరానికి బదిలీ చేయబడతాయని ఇది నిర్ధారిస్తుంది.

నుండి డిడిఎల్ PostgreSQL లో ఉంది లావాదేవీ, కింది విస్తరణ క్రమానికి కట్టుబడి ఉండాలని సిఫార్సు చేయబడింది, తద్వారా ఊహించని లోపం సంభవించినట్లయితే, మీరు "నొప్పి లేకుండా" అమలు చేయవచ్చు ROLLBACK:

  1. లావాదేవీని ప్రారంభించండి
  2. లావాదేవీలో అన్ని మైగ్రేషన్‌లను అమలు చేయండి
  3. అదే లావాదేవీలో, అమలు చేయండి deployDump
  4. లావాదేవీని పూర్తి చేయకుండా, అమలు చేయండి verifyDump. లోపాలు లేకుంటే, అమలు చేయండి COMMIT. లోపాలు ఉంటే, అమలు చేయండి ROLLBACK

జీరో-డౌన్‌టైమ్‌తో సహా అప్లికేషన్ విస్తరణకు ఇప్పటికే ఉన్న విధానాలలో ఈ దశలను సులభంగా విలీనం చేయవచ్చు.

తీర్మానం

పైన వివరించిన పద్ధతులకు ధన్యవాదాలు, "PHP + PostgreSQL" ప్రాజెక్ట్‌ల నుండి గరిష్ట పనితీరును స్క్వీజ్ చేయడం సాధ్యపడుతుంది, అయితే ప్రధాన అప్లికేషన్ కోడ్‌లోని అన్ని వ్యాపార లాజిక్‌లను అమలు చేయడంతో పోలిస్తే చాలా తక్కువ అభివృద్ధి సౌలభ్యాన్ని త్యాగం చేస్తుంది. అదనంగా, డేటా ప్రాసెసింగ్ PL/pgSQL తరచుగా మరింత పారదర్శకంగా కనిపిస్తుంది మరియు PHPలో వ్రాసిన అదే కార్యాచరణ కంటే తక్కువ కోడ్ అవసరం.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి