Dalam dunia prestasi pangkalan data, satu revolusi senyap sedang berlaku. Penambahan sokongan pemipaan baru-baru ini dalam klien baris arahan PostgreSQL telah menghantar gelombang kejutan melalui komuniti pembangun, mendedahkan jurang mengejut dalam sokongan pemacu pangkalan data. Apabila pembangun menemui manfaat prestasi dramatik daripada ciri protokol yang telah lama tersedia ini, penyelenggara pemacu pangkalan data popular sedang bergegas mengejar ketinggalan.
Kebangkitan: Penyelenggara Pemacu Temui Pemipaan
Perbualan mengenai pemipaan PostgreSQL telah mendedahkan satu kebenaran yang tidak selesa: banyak pemacu pangkalan data telah beroperasi tanpa ciri berkuasa ini selama bertahun-tahun. Pengakuan seorang penyelenggara pemacu menyerlahkan kelalaian meluas ini:
Saya harus mengakui, pemacu Python pg8000 yang saya selenggara tidak menyokong mod paip. Saya tidak sedar ia wujud sehingga sekarang, dan tiada siapa yang pernah memintanya.
Pengakuan ini mencetuskan tindakan segera, dengan isu dicipta untuk menambah sokongan paip. Corak ini berulang merentasi ekosistem - pembangun menyedari mereka telah meninggalkan prestasi di atas meja disebabkan pelaksanaan pemacu yang tidak lengkap. Protokol pertanyaan lanjutan yang membolehkan pemipaan telah tersedia sejak PostgreSQL 7.4 pada tahun 2003, tetapi ia mengambil masa sehingga 2021 untuk libpq mendedahkan keupayaan ini, dan hanya sekarang aplikasi mula memanfaatkannya.
Garis Masa Protokol
- PostgreSQL 7.4 (2003): Protokol pertanyaan lanjutan diperkenalkan
- PostgreSQL 14 (2021): libpq memperoleh sokongan pipelining
- PostgreSQL 18 (2024): psql menambah arahan pipeline
Janji Prestasi Memacu Perubahan
Apa yang mendorong kesegeraan tiba-tiba ini? Nombor prestasi bercakap sendiri. Ujian menunjukkan pemipaan boleh mempercepatkan operasi pangkalan data sehingga 71 kali ganda pada sambungan rangkaian yang lebih perlahan. Keajaiban terletak pada penghapusan perjalanan pulang rangkaian dan bukannya hanya mengemas lebih banyak data ke dalam paket. Setiap pertanyaan tidak lagi menunggu yang sebelumnya selesai sebelum dihantar ke pelayan.
Penemuan ini amat memberi kesan untuk aplikasi yang berurusan dengan sambungan kependaman tinggi. Aplikasi awan, sistem teragih, dan mana-mana senario di mana pelayan pangkalan data tidak terletak bersama dengan pelayan aplikasi berpotensi mendapat manfaat paling banyak. Corak permintaan-respons tradisional yang mendominasi interaksi pangkalan data tiba-tiba kelihatan tidak cekap berbanding.
Peningkatan Prestasi Pipelining PostgreSQL
- Localhost: Pecutan 1.5x hingga 5x
- Sambungan LAN: Pecutan 2.6x hingga 42x
- Sambungan WAN: Pecutan 5.4x hingga 71x
Inovasi Komuniti dan Penyelesaian Sementara
Walaupun sokongan pemacu rasmi ketinggalan, komuniti tidak menunggu. Pembangun mencipta klien khusus yang menggunakan pemipaan secara lalai, dan yang lain meneroka pendekatan berasaskan kelompok sebagai alternatif. Perbincangan mendedahkan pemikiran kreatif tentang bagaimana menyusun aplikasi untuk meminimumkan perjalanan pulang, dengan beberapa mencadangkan mengumpulkan pertanyaan baca-sahaja berasingan daripada operasi tulis.
Komuniti Rails telah amat aktif dalam perbualan ini, dengan ciri load_async
mereka mewakili satu pendekatan kepada pengselarian. Walau bagaimanapun, seperti yang dinyatakan seorang penyumbang, perbincangan pemipaan menghadapi cabaran kerana kebanyakan penyumbang Rails besar bekerja dengan MySQL, bukan Postgres, dan MySQL tidak mempunyai sokongan pemipaan yang sebenar. Ini menyerlahkan bagaimana rangka kerja agnostik pangkalan data kadangkala boleh melambatkan penerimaan pengoptimuman khusus pangkalan data.
Jalan Ke Hadapan untuk Prestasi Pangkalan Data
Perbincangan pemipaan mewakili peralihan yang lebih luas dalam cara pembangun berfikir tentang interaksi pangkalan data. Seperti yang diperhatikan seorang pemberi komen, bahasa pengaturcaraan dan model mental kami berakar umbi dalam panggilan prosedur segerak, menjadikan pemikiran berorientasikan kelompok terasa tidak semula jadi. Namun manfaat prestasi terlalu signifikan untuk diabaikan.
Berita baik untuk pembangun adalah mereka tidak perlu menunggu PostgreSQL 18 pada pelayan mereka untuk mendapat manfaat. Penambahbaikan klien psql berfungsi dengan versi pelayan yang lebih lama, bermakna aplikasi boleh mula memanfaatkan pemipaan serta-merta dengan klien dikemas kini. Keserasian ke belakang ini menurunkan halangan untuk penerimaan dan boleh mempercepatkan kemas kini pemacu merentasi ekosistem.
Perbualan mengenai pemipaan PostgreSQL mendedahkan industri dalam peralihan. Apabila pembangun menjadi lebih canggih tentang prestasi pangkalan data, mereka menuntut lebih daripada alat mereka. Perlumbaan kini bermula untuk penyelenggara pemacu melaksanakan ciri yang telah tersembunyi di depan mata selama bertahun-tahun, berpotensi membuka kunci keuntungan prestasi besar-besaran untuk aplikasi di seluruh dunia.
Rujukan: Pemipaan dalam psql (PostgreSQL 18)