PostgreSQL 18 memperkenalkan virtual generated columns, satu ciri yang mengira nilai secara atas permintaan tanpa menyimpannya di cakera. Walaupun keupayaan ini telah menjana keseronokan untuk melengkapkan set ciri PostgreSQL berbanding pesaing seperti MySQL, ia juga telah mencetuskan perbincangan bermakna dalam komuniti pembangun mengenai di mana logik pangkalan data sepatutnya berada dan apakah batasan yang masih tinggal.
Komuniti Mempersoalkan Alternatif Sedia Ada
Sesetengah pembangun mempersoalkan sama ada virtual generated columns menawarkan kelebihan yang ketara berbanding ciri PostgreSQL sedia ada. Pangkalan data ini telah lama menyokong lajur maya berasaskan fungsi melalui syntactic sugar, di mana pembangun boleh mencipta fungsi yang mengambil jenis rekod jadual sebagai input dan mengembalikan nilai yang dikira. Walau bagaimanapun, pendekatan ini memerlukan klien untuk mengetahui tentang fungsi-fungsi ini dan tidak memasukkan nilai yang dikira dalam operasi standard seperti pertanyaan SELECT *
. Virtual generated columns yang baharu berintegrasi dengan lebih lancar ke dalam skema jadual, menjadikannya kelihatan kepada semua interaksi pangkalan data tanpa memerlukan pengetahuan khas daripada pembangun aplikasi.
Perbandingan Lajur Janaan Maya dengan Lajur Janaan Tersimpan
Ciri | Lajur Janaan Maya | Lajur Janaan Tersimpan |
---|---|---|
Penyimpanan | Tidak memerlukan penyimpanan cakera | Disimpan secara kekal pada cakera |
Prestasi | Dikira pada setiap pertanyaan | Pembacaan pantas, penulisan perlahan |
Pengindeksan | Tidak disokong | Boleh diindeks seperti lajur biasa |
Perubahan Skema | Penambahan serta-merta | Mungkin memerlukan penulisan semula jadual |
Kes Penggunaan Terbaik | Ungkapan ringan, ciri eksperimen | Pengiraan mahal, data yang kerap ditanya |
Batasan Menonjolkan Keupayaan PostgreSQL Yang Hilang
Pengenalan virtual generated columns telah membawa perhatian kepada beberapa batasan ketara dalam seni bina semasa PostgreSQL. Generated columns hanya boleh merujuk data dalam baris semasa, menghalang pengiraan yang lebih kompleks yang mungkin melibatkan baris atau jadual lain. Sekatan ini telah memperbaharui seruan untuk penyelenggaraan pandangan tambahan automatik, satu ciri yang akan membolehkan pangkalan data mengekalkan hasil yang dikira dengan cekap merentasi pelbagai jadual.
Stored generated columns akan menjadi lebih berguna jika ia boleh merujuk baris dan jadual lain, ia terhad kepada baris semasa sahaja.
Batasan ini bermakna walaupun virtual generated columns berfungsi dengan baik untuk transformasi mudah seperti penukaran kes atau pengekstrakan medan JSON, ia tidak dapat mengendalikan logik perniagaan yang lebih canggih yang memerlukan pengiraan merentas baris atau merentas jadual.
Batasan Lajur Janaan
- Hanya boleh merujuk lajur dalam baris semasa
- Tidak boleh merujuk jadual atau baris lain
- Tidak boleh menggunakan subkueri atau fungsi agregat
- Terhad kepada ungkapan deterministik
- Pertimbangan keselamatan dengan fungsi tersuai dan jenis yang ditentukan pengguna
Penempatan Logik Aplikasi Kekal Kontroversi
Ciri ini telah mencetuskan semula perdebatan klasik mengenai di mana logik pengiraan sepatutnya berada dalam aplikasi moden. Sesetengah pembangun berhujah bahawa operasi mudah seperti manipulasi rentetan sepatutnya kekal dalam kod aplikasi dan bukannya ditolak turun ke lapisan pangkalan data. Mereka melihat virtual generated columns sebagai kerumitan yang tidak perlu untuk operasi yang mudah dilaksanakan dalam kebanyakan bahasa pengaturcaraan. Yang lain menentang bahawa memusatkan logik ini dalam pangkalan data memastikan konsistensi merentasi semua aplikasi dan mengurangkan kemungkinan perbezaan pelaksanaan antara pelbagai klien yang mengakses data yang sama.
Pertukaran Prestasi Membentuk Corak Penggunaan
Virtual generated columns mempersembahkan pertukaran prestasi yang jelas berbanding rakan stored mereka. Walaupun stored generated columns menambah overhed semasa operasi tulis tetapi membolehkan bacaan pantas dengan sokongan pengindeksan, lajur maya mengekalkan penulisan ringan dengan kos mengira nilai semasa setiap pertanyaan. Ini menjadikan lajur maya amat menarik untuk ciri eksperimen atau medan yang dikira yang jarang diakses, di mana overhed penyimpanan nilai yang dimaterialkan akan membazir.
Keupayaan pengubahsuaian skema segera bagi lajur maya juga menangani kebimbangan praktikal untuk pangkalan data pengeluaran. Menambah lajur maya tidak memerlukan penulisan semula jadual atau operasi backfilling, menjadikannya lebih selamat untuk menguji ciri baharu tanpa berisiko mengunci pangkalan data atau tetingkap penyelenggaraan yang dilanjutkan.
Virtual generated columns mewakili evolusi berterusan PostgreSQL ke arah kelengkapan ciri dengan sistem pangkalan data utama yang lain. Walaupun ia mungkin tidak merevolusikan reka bentuk pangkalan data, ia memberikan pembangun lebih fleksibiliti dalam mengatur logik data mereka dan mengurangkan overhed penyimpanan yang berkaitan dengan nilai yang dikira yang tidak memerlukan pengindeksan atau akses yang kerap.
Rujukan: My favorite PostgreSQL 18 Feature: Virtual Generated Columns