PostgreSQL sebagai Enjin Aplikasi Web: Pendekatan Tidak Konvensional Pembertuk Perisian Cetus Debat Industri

Pasukan Komuniti BigGo
PostgreSQL sebagai Enjin Aplikasi Web: Pendekatan Tidak Konvensional Pembertuk Perisian Cetus Debat Industri

Dalam era yang didominasi oleh rangka kerja JavaScript yang kompleks dan seni bina perkhidmatan mikro, satu trend mengejutkan sedang mendapat momentum dalam kalangan pembertuk perisian: memindahkan logik aplikasi web terus ke dalam lapisan pangkalan data. Derek Sivers, yang terkenal dengan pendekatan tidak konvensionalnya terhadap teknologi, baru-baru ini berkongsi metodologi pembangunan web berpusatkan PostgreSQL beliau yang telah mencetuskan perbincangan hangat dalam komuniti pembertuk perisian. Pendekatan beliau mencabar andaian asas tentang di mana logik perniagaan sepatutnya berada dalam aplikasi web moden.

Falsafah Keutamaan Pangkalan Data

Sivers telah membina aplikasi web berpusatkan PostgreSQL selama sembilan tahun, pada mulanya dengan meminta PostgreSQL memulangkan data JSON yang kemudiannya akan diproses oleh pengawal Ruby. Evolusi terkini beliau membawa konsep ini lebih jauh dengan menanamkan penghuraian templat Mustache terus dalam fungsi PostgreSQL. Ini bermakna pangkalan data bukan sekadar menghidangkan data—ia menjana respons HTML lengkap yang sedia untuk dihantar ke pelayar web. Pendekatan ini menghapuskan lapisan middleware tradisional, dengan fungsi PostgreSQL memulangkan kedua-dua pengepala HTTP dan kandungan badan HTML secara langsung.

Aplikasi anda sedang duduk di atas enjin pengiraan bergaya Ferrari!

Perspektif ini menyerlahkan apa yang dilihat oleh penyokong sebagai potensi tersembunyi sistem pangkalan data moden. Daripada memperlakukan pangkalan data sebagai sekadar penyimpanan data, mereka berhujah bahawa pangkalan data hubungan seperti PostgreSQL mengandungi enjin pengiraan canggih yang kebanyakan aplikasi kurang gunakan.

Komponen Teknikal dalam Pendekatan Sivers:

  • Penghuraian templat Mustache dalam PostgreSQL
  • pgTAP untuk ujian fungsi pangkalan data
  • Pengepala HTTP dan kod status yang dikembalikan daripada fungsi pangkalan data
  • Pangkalan data ujian berasingan (siverstest) untuk ujian terpencil
  • Penyegerakan templat daripada sistem fail ke jadual pangkalan data

Preseden Sejarah dan Reaksi Moden

Konsep meletakkan logik perniagaan dalam prosedur tersimpan bukanlah sesuatu yang benar-benar baru. Beberapa pengulas mengingati pendekatan yang serupa dari awal tahun 2000-an, terutamanya dengan pangkalan data Oracle. Seorang pembertuk perisian menyatakan pekerjaan pertama mereka sekitar tahun 2007 melibatkan kerja pada aplikasi Delphi di mana semua logik perniagaan berada dalam prosedur tersimpan Oracle. Konteks sejarah ini memberikan perspektif penting tentang sama ada kita sedang melihat inovasi atau penemuan semula.

Reaksi daripada pembertuk perisian yang melalui era prosedur tersimpan 1990-an adalah bercampur-campur. Ada yang menyuarakan keraguan berdasarkan pengalaman pahit dengan aplikasi pangkalan data yang terganding rapat dan menjadi mimpi ngeri penyelenggaraan. Walau bagaimanapun, Sivers dan yang lain berhujah bahawa PostgreSQL mewakili paradigma yang berbeza sama sekali—lebih fleksibel dan mesra pembertuk berbanding sistem Oracle yang memberikan reputasi buruk kepada prosedur tersimpan.

Garis Masa Konteks Sejarah:

  • Akhir 1990an: Prosedur tersimpan Oracle untuk logik perniagaan
  • Awal 2000an: Kombinasi Delphi/Oracle adalah perkara biasa
  • 2007: Masih lazim dalam persekitaran perusahaan
  • 2016: Sivers memulakan pembangunan berpusatkan PostgreSQL (9 tahun yang lalu)
  • 2024: Perbincangan semasa dan perkongsian rangka kerja

Pelaksanaan Teknikal dan Peralatan

Pelaksanaan praktikal melibatkan beberapa inovasi pintar. Templat HTML disimpan terus dalam pangkalan data tetapi disunting secara tempatan dalam fail, kemudian diselaraskan menggunakan skrip tersuai. Fungsi PostgreSQL mengendalikan penghuraian templat menggunakan sintaks Mustache, memulangkan respons HTTP lengkap yang termasuk kod status, pengepala dan kandungan HTML. Sistem ini menggunakan pgTAP untuk pengujian, mengekalkan pangkalan data ujian berasingan untuk memastikan kebolehpercayaan fungsi tanpa menjejaskan data pengeluaran.

Seni bina ini mewakili penyederhanaan radikal model aplikasi web tiga lapisan tradisional. Dengan meruntuhkan lapisan aplikasi ke dalam pangkalan data, pembertuk perisian mengurangkan bilangan bahagian bergerak dan titik kegagalan berpotensi. Pendekatan ini sesuai terutamanya untuk aplikasi di mana hubungan data dan peraturan perniagaan adalah kompleks, memanfaatkan ciri pengendalian transaksi yang teguh dan ciri integriti data PostgreSQL.

Projek Komuniti dengan Semangat Serupa

Perbincangan itu mendedahkan beberapa projek lain yang meneroka bidang yang serupa. PostgREST sering disebut sebagai projek yang menjana API REST secara automatik terus dari skema pangkalan data PostgreSQL. Yang lain merujuk kepada SpacetimeDB, yang membawa konsep pangkalan-data-sebagai-pelayan-aplikasi lebih jauh. Seorang pembertuk perisian berkongsi pendekatan eksperimen mereka sendiri yang menghidangkan trafik web terus dari SQLite, menunjukkan keluasan minat dalam seni bina berpusatkan pangkalan data.

Projek-projek ini berkongsi falsafah yang sama: jika pangkalan data anda mampu mengendalikan operasi kompleks dengan cekap, mengapa menambah lapisan tidak perlu yang memperkenalkan kerumitan dan potensi sekatan prestasi? Pergerakan ini mencabar kebijaksanaan konvensional bahawa pangkalan data sepatutnya menjadi sistem penyimpanan bodoh sementara pelayan aplikasi mengendalikan semua logik.

Projek Rangka Kerja Web PostgreSQL Utama Yang Disebutkan:

  • sivers/sivers: Rangka kerja web PostgreSQL tersuai Derek Sivers dengan templat Mustache
  • PostgREST: Menjana REST API secara automatik daripada skema PostgreSQL
  • SpacetimeDB: Enjin pangkalan data yang direka khusus untuk logik aplikasi
  • rumca-js/web_link_browser: Contoh aplikasi web berpusatkan SQLite

Masa Depan Pembangunan Stack Penuh

Perbincangan ini menyentuh trend yang lebih luas dalam pembangunan web, termasuk kebangkitan semula penghasilan sisi pelayan dan pembahagian tugas antara pembertuk perisian frontend dan backend. Apabila piawaian web berkembang untuk mengendalikan kemas kini kandungan dinamik tanpa muat semula halaman penuh, sesetengah pembertuk perisian mempersoalkan sama ada kita masih memerlukan kerumitan menguruskan keadaan sisi klien yang meluas.

Pendekatan berpusatkan pangkalan data berpotensi merapatkan jurang antara peranan frontend dan backend, membolehkan pembertuk perisian menumpukan pada kes penggunaan perniagaan daripada kontrak API antara sistem berasingan. Ini boleh membawa kepada pengalaman pembangunan yang lebih padu dan berpotensi kitaran lelaran yang lebih pantas untuk jenis aplikasi tertentu.

Perbincangan yang berterusan mencadangkan kita mungkin berada di permulaan penilaian semula yang lebih luas tentang seni bina aplikasi web. Apabila pangkalan data menjadi lebih berkemampuan dan pasukan pembangunan mencari cara untuk mengurangkan kerumitan, pendekatan yang memanfaatkan keupayaan pangkalan data dengan lebih lengkap mungkin mendapat penerimaan yang lebih meluas. Sama ada ini mewakili perubahan asas atau pendekatan niche untuk kes penggunaan tertentu masih belum dapat dipastikan, tetapi perbincangan bersemangat menunjukkan topik ini menyentuh soalan penting tentang bagaimana kita membina perisian dalam era moden.

Rujukan: sivers/sivers