PGlite – Gömülü Postgres
(pglite.dev)- PGlite, WASM ortamında tam bir Postgres veritabanını yerelde çalıştırabilen hafif bir çözüm
- Sıkıştırıldığında 3MB'tan küçük boyutuyla, tarayıcı veya istemci ortamlarında da kolayca çalıştırılabiliyor
- Veri yükleme, senkronizasyon ve gerçek zamanlı sorgu özellikleri yerleşik olarak sunuluyor ve reaktif veri işleme sağlıyor
- pgvector dahil dinamik eklenti yükleme özelliğini destekleyerek çeşitli genişletme modüllerinin kullanılmasına imkan tanıyor
- Supabase tabanlı database.build üzerinden yapay zeka ile Postgres veritabanı oluşturup dağıtabilmeye olanak vererek web tabanlı veritabanı geliştirmenin esnekliğini artırıyor
Genel Bakış
- PGlite, WASM(WebAssembly) ortamında çalışan gömülü bir Postgres veritabanı
- Yerel ortamda tam bir Postgres örneği çalıştırabiliyor
- Reaktif veri işleme ve gerçek zamanlı senkronizasyonu destekliyor
Başlıca Özellikler
- Hafiflik: Gzip sıkıştırma baz alındığında 3MB'tan küçük tam bir Postgres derlemesi sunuyor
- Tarayıcı veya hafif istemci ortamlarında da çalışabiliyor
- Genişletilebilirlik: Dinamik eklenti yükleme mekanizması ile çeşitli Postgres genişletmelerini eklemek mümkün
- pgvector eklentisini varsayılan olarak destekliyor
- Reaktiflik: Veri yükleme, senkronizasyon ve gerçek zamanlı sorgu için yerleşik özellikler içeriyor
- Gerçek zamanlı veri güncellemeleri ve reaktif uygulama geliştirme için uygun
Deneme ve Kullanım
- database.build platformunda PGlite tabanlı bir Postgres veritabanı oluşturup yayımlamak mümkün
- Supabase tarafından geliştirilen yapay zeka tabanlı araç sayesinde kullanıcılar veritabanını doğrudan oluşturabiliyor
- Tarayıcı içinde PGlite Postgres örneğini doğrudan çalıştırmak mümkün
- pgvector dahil
- Ek genişletmeler playground(REPL) ortamında denenebiliyor
Önemi
- PGlite, Postgres'in yeteneklerini tarayıcı seviyesine taşıyarak istemci odaklı veritabanı çalıştırmayı mümkün kılıyor
- Hafiflik, genişletilebilirlik ve reaktifliği bir araya getirerek yeni nesil web uygulaması geliştirme için dikkat çeken bir veritabanı çözümü olarak öne çıkıyor
2 yorum
Bu haberi gördükten sonra kendi projeme deneme amaçlı olarak PGlite’ı eklemeyi denedim. Özellikle basit testlerde gerçekten çok hızlı ve iyi olduğunu gördüm. Gelecek için de umut verici görünüyor.
Hacker News görüşleri
Ben PGlite ekibinde çalışıyorum. HN'de yeniden yer almasından memnunum
Son dönemde haftalık indirme sayısı 3 milyonu geçti ve yakında 4 milyona ulaşacak — bkz. npm paket sayfası
Başlangıçta web uygulamalarına gömmek için yapmıştık ama şimdi geliştirme araçları ve CLI ortamları içindeki kullanım çok hızlı artıyor. Google Firebase ve Prisma da kendi CLI'larında PGlite'ı gömülü kullanarak sunucu ürünlerini emüle ediyor
Yani DuckDB veya sql.js-httpvfs gibi, uzak bir URL'den range request ile blok okuma yaklaşımı
Bizim laboratuvarda da böyle bir proje yürütülüyor ama http-vfs ekosistemi hâlâ prototip düzeyinde, bu yüzden optimize edilmiş kütüphane neredeyse yok
PostgreSQL'in disk erişim örüntüsünün SQLite'a göre http-vfs için daha uygun olup olmadığını da merak ediyorum
Eğer öyleyse, ağ protokolü desteği eklenip JS dışındaki dillerin CI ortamlarında da kullanılabilse gerçekten çok iyi olur
Hedefin SQLite veya DuckDB için bir alternatif olmak olup olmadığını merak ediyorum
Ben PGlite'ı JavaScript dışı çalışma zamanlarında kullanmak istiyorum
Örneğin bir Go CLI içine WASM çalışma zamanı olarak gömüp SQLite yerine kullanmak gibi
Issue #89'a bakınca Rust için üçüncü taraf binding'ler var gibi görünüyor; resmi olarak başka diller için binding desteği planlanıyor mu merak ediyorum
PGlite gerçekten mükemmel. Ben bunu geliştirme amaçlı olarak tarayıcı içi PostgreSQL sunucusu şeklinde kullanıyorum
Sunucu PG protokolünü uyguluyor, istemci bağlandığında sorguları tarayıcıya iletiyor ve içeride PGlite çalışıyor
Sonuç olarak tarayıcının içinde tam bir PG sunucusu çalışıyor — dbfor.dev
Bu proje çok ilgi çekici. Postgres'in dezavantajlarından biri her zaman bir sunucu kurmayı gerektirmesi; bu da o sorunu çözüyor
Acaba bunu yerel kütüphane olarak derlemenin bir yolu var mı diye merak ediyorum. Kodun bir kısmı yeniden kullanılabilir gibi görünüyor
PGlite ile SQLite arasındaki farkların ne olduğunu merak ediyorum
Ben daha çok gömülü ortamlarda ve tarayıcı istemci tarafında SQLite kullandım
SQLite'ın gücü sadeliği ama PGlite'ın çeşitli genişletme özellikleri ilginç görünüyor. İki veritabanı arasındaki temel farkların ne olduğunu bilmek istiyorum
SQLite ile testleri hızlıca çalıştırabilirsiniz ama gerçek altyapınız PostgreSQL ise bunun değeri sınırlı kalır
Unit testlerde hâlâ TestContainers ile Docker tabanlı Postgres çalıştırıyorum
Ama bu tür alternatifler sayesinde py-pglite gibi Python test araçları da mümkün oldu
Yine de ben pgserver gibi gerçek Postgres'i hafif bir pip paketi olarak çalıştırabilen yaklaşımlara daha çok güveniyorum
Benim görüşüm tamamen unit test perspektifinden
Ekibimiz yeni bir dahili servis geliştirirken test ortamına PGlite ekledi
Test sırasında PGlite'ı, gerçek çalıştırmada ise Postgres instance'ını kullanacak şekilde bir wrapper kurduk ve sonuç çok başarılı oldu
Özellikle
.clone()özelliğiyle veritabanı checkpoint'leri oluşturup her test için başlangıç durumuna geri dönebiliyoruz50 test paketini paralel çalıştırmak da çok kolay hâle geldi
Bunu test için kullanıyorum ve bellek içi SQLite ile tam Postgres instance'ı arasında bir orta nokta gibi hissettiriyor
Uzun zamandır böyle bir şey arıyordum; testler hızlandığı için memnunum. Şimdiye kadar neredeyse hiç kısıtla karşılaşmadım
Doltgres adında tek çalıştırılabilir dosya biçiminde bir Postgres de var
Deno gibi tek bir
.exedosyasını indirip çalıştırınca doğrudan Postgres ayağa kalkıyor — Doltgres kurulum dokümanı