Sebuah perpustakaan ujian Python baharu yang dipanggil py-pglite telah mencetuskan perbincangan hangat dalam komuniti pembangun mengenai pendekatannya terhadap ujian pangkalan data. Perpustakaan ini berjanji untuk membawa set ciri penuh PostgreSQL kepada ujian Python melalui PGlite, versi PostgreSQL yang dikompil WebAssembly yang berjalan dalam Node.js. Walau bagaimanapun, komuniti mempersoalkan sama ada pendekatan ini benar-benar memenuhi janjinya untuk kesederhanaan dan prestasi.
Dakwaan Prestasi Dipersoalkan
Pemasaran perpustakaan ini menekankan prestasi yang sangat pantas melalui PostgreSQL dalam memori, tetapi pembangun menolak dakwaan ini. Pengkritik menunjukkan bahawa WebAssembly yang berjalan dalam Node.js tidak mungkin mengatasi prestasi kod PostgreSQL asli yang telah dioptimumkan selama beberapa dekad. Lapisan abstraksi tambahan - Python memanggil Node.js yang menjalankan WebAssembly - menimbulkan persoalan sama ada persediaan ini benar-benar boleh lebih pantas daripada alternatif yang telah mapan seperti TestContainers atau contoh PostgreSQL asli.
Beberapa ahli komuniti telah berkongsi pengalaman mereka dengan TestContainers, melaporkan masa pelaksanaan ujian yang kelihatan kompetitif dengan janji py-pglite. Seorang pembangun menyatakan bahawa ujian berasaskan TestContainers mereka dengan PostgreSQL hanya mengambil masa 30 saat lebih lama daripada ujian SQLite, menunjukkan bahawa jurang prestasi mungkin tidak begitu ketara seperti yang didakwa oleh py-pglite.
Perbandingan Prestasi ( TestContainers vs SQLite ):
- Ujian SQLite dengan Python 3.9 : 3m 41s
- Ujian PostgreSQL dengan TestContainers : 4m 11s
- Perbezaan: Hanya 30 saat lebih perlahan untuk keserasian penuh PostgreSQL
Dilema Kebergantungan Node.js
Mungkin aspek yang paling kontroversial mengenai py-pglite ialah kebergantungannya pada Node.js dan pengurusan pakej npm automatik. Perpustakaan ini mengiklankan tiada pemasangan PostgreSQL diperlukan sebagai titik jualan, tetapi pembangun dengan cepat menyedari ironinya: Node.js sendiri berukuran 63MB berbanding 32MB PostgreSQL. Ini telah membawa kepada persoalan sama ada pertukaran kebergantungan masuk akal.
Saya tidak dapat membayangkan wasm yang berjalan dalam nodejs lebih pantas daripada kod asli yang telah dioptimumkan selama beberapa dekad. postgres ialah 32MB, nodejs ialah 63MB.
Yang lebih membimbangkan ramai pembangun ialah pemasangan automatik kebergantungan npm oleh perpustakaan pada masa runtime. Tingkah laku ini, yang diaktifkan secara lalai, telah menimbulkan bendera merah mengenai keserasian dengan persediaan Node.js sedia ada dan alat pengimbasan keselamatan. Walaupun ciri ini boleh dilumpuhkan, kekurangan dokumentasi yang jelas mengenai pengurusan kebergantungan Node.js secara manual telah mengecewakan pengguna berpotensi.
Perbandingan Saiz:
- PostgreSQL: 32MB
- Node.js: 63MB
- py-pglite memerlukan Node.js 18+ dan Python 3.10+
Penyelesaian Alternatif Mendapat Perhatian
Perbincangan telah menyerlahkan beberapa alternatif matang yang telah digunakan oleh pembangun dengan jayanya. TestContainers muncul sebagai pilihan popular, menawarkan contoh PostgreSQL sebenar dalam bekas Docker dengan overhed persediaan yang minimum. Pembangun lain menyebut penyelesaian pytest-docker-compose dan embedded-postgres yang mengelakkan kebergantungan Node.js sepenuhnya.
Sesetengah ahli komuniti sedang meneroka pendekatan yang lebih bercita-cita tinggi, seperti mengkompil PostgreSQL terus ke dalam sambungan Python atau menggunakan runtime WASI untuk menghapuskan keperluan Node.js. Perbincangan ini menunjukkan bahawa walaupun py-pglite menangani keperluan sebenar, komuniti melihat ruang untuk penambahbaikan dalam pendekatan pelaksanaan.
Memandang ke Hadapan
Walaupun terdapat kritikan, py-pglite telah menjana minat tulen untuk percubaannya memudahkan ujian PostgreSQL dalam Python. Pengarang perpustakaan telah mengakui maklum balas dan menggariskan rancangan untuk versi masa depan yang boleh menangani beberapa batasan semasa, termasuk sokongan berpotensi untuk binari asli dan pengurusan kebergantungan yang lebih baik.
Perdebatan ini mencerminkan cabaran yang lebih luas dalam ekosistem Python: mengimbangi kemudahan dengan prestasi dan pengurusan kebergantungan. Walaupun py-pglite mungkin bukan penyelesaian yang sempurna, ia telah mencetuskan perbincangan berharga mengenai strategi ujian dan menyerlahkan keperluan berterusan untuk alat ujian pangkalan data yang lebih baik dalam pembangunan Python.
Rujukan: py-pglite