Logika bisnis ing database nggunakake SchemaKeeper

Tujuan artikel iki yaiku nggunakake conto perpustakaan schema-keeper nuduhake alat sing bisa nyederhanakake proses ngembangake database ing proyek PHP kanthi nggunakake PostgreSQL DBMS.

Informasi saka artikel iki bakal, pisanan kabeh, migunani kanggo pangembang sing pengin nggawe paling saka Kapabilitas PostgreSQL, nanging ngadhepi karo masalah njaga logika bisnis diselehake ing database.

Artikel iki ora bakal njlèntrèhaké kaluwihan utawa cacat saka nyimpen logika bisnis ing database. Dianggep yen pilihan wis digawe dening sing maca.

Pitakonan ing ngisor iki bakal dianggep:

  1. Ing wangun apa dump struktur database kudu disimpen ing sistem kontrol versi (sabanjuré diarani VCS)
  2. Carane trek owah-owahan ing struktur database sawise nyimpen dump
  3. Cara nransfer owah-owahan ing struktur database menyang lingkungan liyane tanpa konflik lan file migrasi raksasa
  4. Cara ngatur proses karya paralel ing proyek dening sawetara pangembang
  5. Cara kanthi aman nyebarake owah-owahan liyane ing struktur database menyang lingkungan produksi

    SchemaKeeper dirancang kanggo nggarap prosedur sing disimpen sing ditulis ing basa kasebut PL/pgSQL. Tes karo basa liya durung ditindakake, mula panggunaan bisa uga ora efektif utawa ora bisa ditindakake.

Carane nyimpen mbucal struktur database ing VCS

perpustakaan schema-keeper menehi fungsi saveDump, sing nyimpen struktur kabeh obyek saka database minangka file teks sing kapisah. Output minangka direktori sing ngemot struktur database, dipérang dadi file klompok sing bisa ditambahake kanthi gampang menyang VCS.

Ayo goleki ngowahi obyek saka database dadi file nggunakake sawetara conto:

Jinis obyek
Skema
Judhul
Path relatif kanggo file

Tabel
umum
akun
./public/tables/accounts.txt

Prosedur sing disimpen
umum
auth (hash bigint)
./public/functions/auth(int8).sql

Pambuka
pesenan
tarif
./booking/views/tariffs.txt

Isi file minangka representasi teks saka struktur obyek database tartamtu. Contone, kanggo prosedur sing disimpen, isi file bakal dadi definisi lengkap prosedur sing disimpen, diwiwiti saka blok. CREATE OR REPLACE FUNCTION.

Minangka bisa dideleng saka tabel ing ndhuwur, path menyang file nyimpen informasi babagan jinis, skema lan jeneng obyek kasebut. Pendekatan iki nggampangake navigasi liwat review dump lan kode owah-owahan ing database.

extension .sql kanggo file kanthi kode sumber prosedur sing disimpen, iki dipilih supaya IDE kanthi otomatis nyedhiyakake alat kanggo sesambungan karo database nalika file dibukak.

Carane trek owah-owahan ing struktur database sawise nyimpen dump

Kanthi nyimpen mbucal struktur database saiki ing VCS, kita entuk kesempatan kanggo mriksa apa owah-owahan ing struktur database sawise dump digawe. Ing perpustakaan schema-keeper kanggo ndeteksi owah-owahan ing struktur database, fungsi kasedhiya verifyDump, sing ngasilake informasi babagan bedane tanpa efek samping.

Cara alternatif kanggo mriksa yaiku nelpon maneh fungsi kasebut saveDump, nemtokake direktori sing padha, lan mriksa ing VCS kanggo owah-owahan. Amarga kabeh obyek saka database disimpen ing file sing kapisah, VCS mung bakal nuduhake obyek sing diganti.
Kerugian utama metode iki yaiku kudu nimpa file supaya bisa ndeleng owah-owahan.

Cara nransfer owah-owahan ing struktur database menyang lingkungan liyane tanpa konflik lan file migrasi raksasa

Thanks kanggo fungsi deployDump Kode sumber prosedur sing disimpen bisa diowahi kanthi cara sing padha karo kode sumber aplikasi biasa. Sampeyan bisa nambah / mbusak baris anyar ing kode prosedur sing disimpen lan langsung push owahan kanggo kontrol versi, utawa nggawe / mbusak prosedur disimpen kanthi nggawe / mbusak file sing cocog ing direktori mbucal.

Contone, kanggo nggawe prosedur disimpen anyar ing skema public mung nggawe file anyar karo extension .sql ing direktori public/functions, nyeleh kode sumber saka prosedur disimpen ing, kalebu pamblokiran CREATE OR REPLACE FUNCTION, banjur nelpon fungsi deployDump. Ngowahi lan mbusak prosedur sing disimpen kedadeyan kanthi cara sing padha. Mangkono, kode kasebut mlebu ing VCS lan database bebarengan.

Yen ana kesalahan ing kode sumber saka prosedur sing disimpen, utawa ana bedo antarane jeneng file lan prosedur sing disimpen, banjur deployDump bakal gagal, nampilake teks kesalahan. Ora cocog karo prosedur sing disimpen ing antarane dump lan database saiki ora bisa digunakake nalika nggunakake deployDump.

Nalika nggawe prosedur sing disimpen anyar, ora perlu ngetik jeneng file sing bener kanthi manual. Iku cukup kanggo file duwe extension .sql. Sawise telpon deployDump teks kesalahan bakal ngemot jeneng bener, kang bisa digunakake kanggo ngganti jeneng berkas.

deployDump ngidini sampeyan ngganti paramèter saka fungsi utawa jinis bali tanpa tumindak tambahan, nalika karo pendekatan klasik sampeyan kudu
eksekusi dhisik DROP FUNCTION, lan mung banjur CREATE OR REPLACE FUNCTION.

Sayange, ana sawetara kahanan deployDump ora bisa kanthi otomatis ngetrapake owah-owahan. Contone, yen fungsi pemicu sing digunakake dening paling siji pemicu dibusak. Kahanan kasebut dirampungake kanthi manual nggunakake file migrasi.

Yen sampeyan tanggung jawab kanggo migrasi owah-owahan menyang prosedur sing disimpen schema-keeper, banjur file migrasi kudu digunakake kanggo mindhah owah-owahan liyane ing struktur. Contone, perpustakaan sing apik kanggo nggarap migrasi yaiku doktrin / migrasi.

Migrasi kudu ditrapake sadurunge diluncurake deployDump. Iki ngidini sampeyan nggawe kabeh owah-owahan ing struktur lan mutusake masalah kahanan supaya owah-owahan ing prosedur sing disimpen banjur ditransfer tanpa masalah.

Nggarap migrasi bakal diterangake kanthi luwih rinci ing bagean ing ngisor iki.

Cara ngatur proses karya paralel ing proyek dening sawetara pangembang

Sampeyan perlu kanggo nggawe script kanggo initialization lengkap database, kang bakal dibukak dening pangembang ing mesin karya, nggawa struktur database lokal ing sesuai karo dump disimpen ing VCS. Cara paling gampang yaiku mbagi initialization database lokal dadi 3 langkah:

  1. Ngimpor file kanthi struktur dhasar sing bakal diarani contone. base.sql
  2. Nglamar Migrasi
  3. Telpon deployDump

base.sql minangka titik wiwitan ing ndhuwur migrasi sing ditrapake lan dieksekusi deployDump, sing base.sql + миграции + deployDump = актуальная структура БД. Sampeyan bisa nggawe file kasebut nggunakake sarana pg_dump. Digunakake base.sql istimewa nalika initializing database saka ngeruk.

Ayo nelpon script kanggo initialization database lengkap refresh.sh. Alur kerja bisa katon kaya iki:

  1. Pangembang diluncurake ing lingkungane refresh.sh lan entuk struktur database saiki
  2. Pangembang wiwit nggarap tugas ing tangan, ngowahi database lokal kanggo nyukupi kabutuhan fungsi anyar (ALTER TABLE ... ADD COLUMN lsp)
  3. Sawise ngrampungake tugas, pangembang nelpon fungsi kasebut saveDumpkanggo nindakake owah-owahan sing digawe menyang database ing VCS
  4. Pangembang diluncurake maneh refresh.shbanjur verifyDumpsing saiki nuduhake dhaptar owah-owahan kanggo kalebu ing migrasi
  5. Pangembang nransfer kabeh owah-owahan struktur menyang file migrasi, mlaku maneh refresh.sh и verifyDump, lan, yen migrasi wis disusun kanthi bener, verifyDump ora bakal nuduhake beda antarane database lokal lan dump disimpen

Proses sing diterangake ing ndhuwur kompatibel karo prinsip gitflow. Saben cabang ing VCS bakal ngemot versi dump dhewe, lan nalika nggabung cabang, dump bakal digabung. Umume kasus, ora ana tindakan tambahan sing kudu ditindakake sawise gabung, nanging yen owah-owahan digawe ing macem-macem cabang, contone, ing meja sing padha, konflik bisa uga muncul.

Ayo dipikirake kahanan konflik nggunakake conto: ana cabang berkembang, saka rong cabang cabang: fitur1 и fitur2, sing ora ana konflik karo berkembang, nanging duwe konflik karo siji liyane. Tugas kanggo nggabungake loro cabang kasebut berkembang. Ing kasus iki, dianjurake kanggo gabungke siji cabang menyang berkembangbanjur gabung berkembang menyang cabang sing isih ana, ngrampungake konflik ing cabang sing isih ana, lan banjur nggabungake cabang pungkasan menyang berkembang. Sajrone fase resolusi konflik, sampeyan bisa uga kudu ndandani file migrasi ing cabang pungkasan supaya cocog karo dump pungkasan, sing kalebu asil gabungan.

Cara kanthi aman nyebarake owah-owahan liyane ing struktur database menyang lingkungan produksi

Thanks kanggo anané mbucal struktur database saiki ing VCS, dadi bisa kanggo mriksa database produksi kanggo tundhuk pas karo struktur sing dibutuhake. Iki mesthekake yen kabeh owah-owahan sing dikarepake para pangembang wis sukses ditransfer menyang basis produksi.

Wiwit DDL ing PostgreSQL yaiku transaksional, dianjurake kanggo netepi urutan panyebaran ing ngisor iki, supaya, yen ana kesalahan sing ora dikarepke, sampeyan bisa "ora lara" nglakokake ROLLBACK:

  1. Miwiti transaksi
  2. Nindakake kabeh migrasi ing transaksi
  3. Ing transaksi sing padha, eksekusi deployDump
  4. Tanpa ngrampungake transaksi, eksekusi verifyDump. Yen ora ana kesalahan, mbukak COMMIT. Yen ana kesalahan, mbukak ROLLBACK

Langkah-langkah kasebut bisa gampang diintegrasi menyang pendekatan sing wis ana kanggo panyebaran aplikasi, kalebu wektu nol-down.

kesimpulan

Thanks kanggo cara sing diterangake ing ndhuwur, sampeyan bisa nyuda kinerja maksimal saka proyek "PHP + PostgreSQL", nalika ngorbanake penak pembangunan sing relatif sithik dibandhingake karo ngetrapake kabeh logika bisnis ing kode aplikasi utama. Kajaba iku, pangolahan data ing PL/pgSQL asring katon luwih transparan lan mbutuhake kode kurang saka fungsi padha ditulis ing PHP.

Source: www.habr.com

Add a comment