ከ SchemaKeeper ጋር በመረጃ ቋቱ ውስጥ የንግድ ሎጂክ

የዚህ ጽሑፍ ዓላማ የቤተ-መጽሐፍትን ምሳሌ መጠቀም ነው። schema-ጠባቂ PostgreSQL DBMS በመጠቀም በPHP ፕሮጀክቶች ውስጥ የውሂብ ጎታዎችን የማዘጋጀት ሂደትን በእጅጉ የሚያቃልሉ መሳሪያዎችን ያሳዩ።

ከዚህ ጽሑፍ የተገኘው መረጃ በመጀመሪያ የ PostgreSQL ችሎታዎችን ለመጠቀም ለሚፈልጉ ገንቢዎች ጠቃሚ ይሆናል ፣ ግን በመረጃ ቋቱ ውስጥ የተቀመጠውን የንግድ አመክንዮ የመጠበቅ ችግሮች ያጋጥሟቸዋል።

ይህ መጣጥፍ የንግድ ሎጂክን በመረጃ ቋት ውስጥ ማከማቸት ያለውን ጥቅምና ጉዳት አይገልጽም። ምርጫው አስቀድሞ በአንባቢው እንደተደረገ ይገመታል.

የሚከተሉት ጥያቄዎች ግምት ውስጥ ይገባሉ.

  1. የውሂብ ጎታ መዋቅር መጣል በምን አይነት መልኩ በስሪት ቁጥጥር ስርዓት ውስጥ መቀመጥ አለበት (ከዚህ በኋላ ቪሲኤስ ተብሎ ይጠራል)
  2. ቆሻሻን ከቆጠቡ በኋላ በመረጃ ቋቱ መዋቅር ላይ ለውጦችን እንዴት መከታተል እንደሚቻል
  3. በዳታቤዝ መዋቅር ውስጥ ያሉ ለውጦችን ያለ ግጭት እና ግዙፍ የፍልሰት ፋይሎች ወደ ሌሎች አካባቢዎች እንዴት ማስተላለፍ እንደሚቻል
  4. በበርካታ ገንቢዎች በፕሮጀክት ላይ ትይዩ ስራዎችን እንዴት ማደራጀት እንደሚቻል
  5. በመረጃ ቋት መዋቅር ላይ ተጨማሪ ለውጦችን በአስተማማኝ ሁኔታ ወደ ምርት አካባቢ እንዴት ማሰማራት እንደሚቻል

    የመርሃግብር ጠባቂ በቋንቋው ከተፃፉ የተከማቹ ሂደቶች ጋር ለመስራት የተነደፈ PL/pgSQL. ከሌሎች ቋንቋዎች ጋር መሞከር አልተካሄደም, ስለዚህ አጠቃቀሙ ያን ያህል ውጤታማ ላይሆን ይችላል ወይም ላይሆን ይችላል.

በቪሲኤስ ውስጥ የውሂብ ጎታ መዋቅርን እንዴት ማከማቸት እንደሚቻል

ቤተ መጻሕፍት schema-ጠባቂ ተግባር ይሰጣል saveDump, ይህም የሁሉንም ነገሮች መዋቅር ከውሂብ ጎታ እንደ የተለየ የጽሑፍ ፋይሎች ያስቀምጣቸዋል. ውጤቱ በቀላሉ ወደ ቪሲኤስ ሊጨመሩ በሚችሉ በቡድን የተከፋፈሉ የመረጃ ቋቱን መዋቅር የያዘ ማውጫ ነው።

ብዙ ምሳሌዎችን በመጠቀም ነገሮችን ከውሂብ ጎታ ወደ ፋይሎች እንለውጣለን።

የነገር አይነት
መርሃግብሩ
ርዕስ
ወደ ፋይል አንጻራዊ መንገድ

ጠረጴዛ
ሕዝባዊ
መለያዎች
./public/tables/accounts.txt

የተከማቸ አሰራር
ሕዝባዊ
auth(ሀሽ ቢግንት)
./public/functions/auth(int8).sql

መግቢያ
ማስያዣ
ታሪፎች
./booking/views/tariffs.txt

የፋይሎቹ ይዘቶች የአንድ የተወሰነ የውሂብ ጎታ ነገር አወቃቀር የጽሑፍ ውክልና ናቸው። ለምሳሌ ፣ ለተከማቹ ሂደቶች ፣ የፋይሉ ይዘት ከብሎክ ጀምሮ ፣ የተከማቸ አሰራር ሙሉ ፍቺ ይሆናል ። CREATE OR REPLACE FUNCTION.

ከላይ ካለው ሰንጠረዥ እንደሚታየው, ወደ ፋይሉ የሚወስደው መንገድ ስለ እቃው አይነት, እቅድ እና ስም መረጃን ያከማቻል. ይህ አካሄድ በዳታ ቤዝ ውስጥ የተደረጉ ለውጦችን በቆሻሻ እና በኮድ ግምገማ ውስጥ ለማሰስ ቀላል ያደርገዋል።

ቅጥያ .sql ለተከማቸ የአሰራር ሂደት ምንጭ ኮድ ፋይሎች ይህ የተመረጠው IDE ፋይሉ በሚከፈትበት ጊዜ ከመረጃ ቋቱ ጋር መስተጋብር ለመፍጠር መሳሪያዎችን በራስ-ሰር እንዲያቀርብ ነው።

ቆሻሻን ከቆጠቡ በኋላ በመረጃ ቋቱ መዋቅር ላይ ለውጦችን እንዴት መከታተል እንደሚቻል

አሁን ያለውን የውሂብ ጎታ መዋቅር በቪሲኤስ ውስጥ በማስቀመጥ፣ መጣያው ከተፈጠረ በኋላ በመረጃ ቋቱ መዋቅር ላይ ለውጦች መደረጉን ለማረጋገጥ እድሉን እናገኛለን። በቤተ-መጽሐፍት ውስጥ schema-ጠባቂ በመረጃ ቋቱ መዋቅር ላይ ለውጦችን ለመለየት አንድ ተግባር ተሰጥቷል 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 ለውጦችን በራስ ሰር መተግበር አልተቻለም። ለምሳሌ ቢያንስ በአንድ ቀስቅሴ ጥቅም ላይ የሚውለው ቀስቅሴ ተግባር ከተወገደ። እንደነዚህ ያሉ ሁኔታዎች የስደት ፋይሎችን በመጠቀም በእጅ መፍትሄ ያገኛሉ.

በተከማቹ ሂደቶች ላይ ለውጦችን የማሸጋገር ሃላፊነት እርስዎ ከሆኑ schema-ጠባቂ, ከዚያም ማይግሬሽን ፋይሎች ሌሎች መዋቅር ውስጥ ለውጦች ለማስተላለፍ ጥቅም ላይ መዋል አለበት. ለምሳሌ፣ ከስደት ጋር አብሮ ለመስራት ጥሩ ቤተ-መጽሐፍት ነው። ዶክትሪን / ፍልሰት.

ስደት ከመጀመሩ በፊት መተግበር አለበት። deployDump. ይህ በአወቃቀሩ ላይ ሁሉንም ለውጦች እንዲያደርጉ እና ችግር ያለባቸውን ሁኔታዎች እንዲፈቱ ይፈቅድልዎታል ስለዚህ የተከማቹ ሂደቶች ለውጦች በቀጣይ ያለምንም ችግር ይተላለፋሉ።

ከስደት ጋር አብሮ መስራት በሚቀጥሉት ክፍሎች በበለጠ ዝርዝር ይገለጻል።

በበርካታ ገንቢዎች በፕሮጀክት ላይ ትይዩ ስራዎችን እንዴት ማደራጀት እንደሚቻል

የውሂብ ጎታውን ሙሉ በሙሉ ለመጀመር ስክሪፕት መፍጠር አስፈላጊ ነው, ይህም በገንቢው በስራው ማሽን ላይ ይጀምራል, የአካባቢያዊ የውሂብ ጎታ አወቃቀሩን በቪሲኤስ ውስጥ በተቀመጠው መጣያ መሰረት ያመጣል. በጣም ቀላሉ መንገድ የአካባቢ ዳታቤዝ አጀማመርን በ 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. ሥራውን ካጠናቀቀ በኋላ ገንቢው ተግባሩን ይጠራል saveDumpበቪሲኤስ ውስጥ ባለው የውሂብ ጎታ ላይ የተደረጉ ለውጦችን ለማድረግ
  4. የገንቢ ዳግም ማስጀመር refresh.shእንግዲህ verifyDumpአሁን በስደት ውስጥ የሚካተቱትን ለውጦች ዝርዝር ያሳያል
  5. ገንቢው ሁሉንም የመዋቅር ለውጦች ወደ ፍልሰት ፋይል ያስተላልፋል፣ እንደገና ይሰራል refresh.sh и verifyDump, እና, ፍልሰት በትክክል ከተጠናቀረ, verifyDump በአካባቢው የውሂብ ጎታ እና በተቀመጠው ቆሻሻ መካከል ምንም ልዩነት አይታይም

ከላይ የተገለፀው ሂደት ከ gitflow መርሆዎች ጋር ተኳሃኝ ነው. በቪሲኤስ ውስጥ ያለው እያንዳንዱ ቅርንጫፍ የራሱ የሆነ የቆሻሻ መጣያ ሥሪት ይይዛል፣ እና ቅርንጫፎችን ሲዋሃዱ ቆሻሻዎቹ ይዋሃዳሉ። በአብዛኛዎቹ ሁኔታዎች, ከተዋሃዱ በኋላ ምንም ተጨማሪ እርምጃ መውሰድ አያስፈልግም, ነገር ግን በተለያዩ ቅርንጫፎች ላይ ለውጦች ከተደረጉ, ለምሳሌ, ወደ አንድ ጠረጴዛ, ግጭት ሊፈጠር ይችላል.

አንድ ምሳሌ በመጠቀም የግጭት ሁኔታን እናስብ፡ ቅርንጫፍ አለ። ማዳበር, ከየትኛው ሁለት ቅርንጫፎች ቅርንጫፎች; ባህሪይNUMX። и ባህሪይNUMX።ጋር ምንም ግጭት የሌላቸው ማዳበር, ግን እርስ በእርሳቸው ይጋጫሉ. ተግባሩ ሁለቱንም ቅርንጫፎች ማዋሃድ ነው ማዳበር. በዚህ ጉዳይ ላይ በመጀመሪያ ከቅርንጫፎቹ አንዱን ወደ ውስጥ ማዋሃድ ይመከራል ማዳበርእና ከዚያ ይዋሃዱ ማዳበር ወደ ቀሪው ቅርንጫፍ, በቀሪው ቅርንጫፍ ውስጥ ግጭቶችን መፍታት, ከዚያም የመጨረሻውን ቅርንጫፍ ወደ ውስጥ በማዋሃድ ማዳበር. በግጭት አፈታት ጊዜ የፍልሰት ፋይሉን በመጨረሻው ቅርንጫፍ ላይ ማስተካከል ሊኖርብዎት ይችላል ይህም ከመጨረሻው ቆሻሻ ጋር ይዛመዳል, ይህም የውህደቶቹን ውጤቶች ያካትታል.

በመረጃ ቋት መዋቅር ላይ ተጨማሪ ለውጦችን በአስተማማኝ ሁኔታ ወደ ምርት አካባቢ እንዴት ማሰማራት እንደሚቻል

አሁን ያለው የውሂብ ጎታ መዋቅር በቪሲኤስ ውስጥ በመገኘቱ ምስጋና ይግባውና ከሚፈለገው መዋቅር ጋር በትክክል መሟላቱን የምርት ዳታቤዙን ማረጋገጥ ተችሏል። ይህ ገንቢዎቹ ያሰቡት ሁሉም ለውጦች በተሳካ ሁኔታ ወደ ምርት መሠረት መተላለፉን ያረጋግጣል።

ጀምሮ ዲ.ኤል. በ PostgreSQL ውስጥ ነው። ግብይት, የሚከተለውን የማሰማራት ትእዛዝ ለማክበር ይመከራል, ስለዚህ, ያልተጠበቀ ስህተት ቢፈጠር, "ያለ ህመም" መፈጸም ይችላሉ. ROLLBACK:

  1. ግብይት ይጀምሩ
  2. በግብይት ውስጥ ሁሉንም ፍልሰት ያከናውኑ
  3. በተመሳሳዩ ግብይት, ያከናውኑ deployDump
  4. ግብይቱን ሳይጨርሱ, ያሂዱ verifyDump. ምንም ስህተቶች ከሌሉ, አሂድ COMMIT. ስህተቶች ካሉ, አሂድ ROLLBACK

እነዚህ እርምጃዎች በቀላሉ ወደ ትግበራ ማሰማራት ካሉ ነባር አቀራረቦች ጋር ሊዋሃዱ ይችላሉ፣ ዜሮ-መቀነስ ጊዜን ጨምሮ።

መደምደሚያ

ከላይ ለተገለጹት ዘዴዎች ምስጋና ይግባቸውና በዋናው የመተግበሪያ ኮድ ውስጥ ሁሉንም የንግድ ሥራ አመክንዮዎች ከመተግበሩ ጋር ሲነፃፀር በአንጻራዊ ሁኔታ ሲታይ አነስተኛ የልማት ምቾትን እየከፈለ ከ "PHP + PostgreSQL" ፕሮጀክቶች ውስጥ ከፍተኛውን አፈፃፀም ማስወጣት ይቻላል. በተጨማሪም, የውሂብ ሂደት ውስጥ PL/pgSQL ብዙ ጊዜ የበለጠ ግልፅ ይመስላል እና በPHP ከተፃፈው ተመሳሳይ ተግባር ያነሰ ኮድ ይፈልጋል።

ምንጭ: hab.com

አስተያየት ያክሉ