- PGlite เป็นโซลูชันน้ำหนักเบาที่สามารถ รันฐานข้อมูล Postgres แบบเต็มรูปแบบในเครื่องบนสภาพแวดล้อม WASM ได้
- เมื่อบีบอัดแล้วมีขนาด ต่ำกว่า 3MB จึงสามารถรันได้อย่างสะดวกทั้งในเบราว์เซอร์หรือสภาพแวดล้อมฝั่งไคลเอนต์
- มีฟังก์ชัน การโหลดข้อมูล การซิงก์ และการคิวรีแบบเรียลไทม์ ในตัว ช่วยให้จัดการข้อมูลแบบตอบสนองได้
- รองรับ การโหลดส่วนขยายแบบไดนามิก รวมถึง pgvector ทำให้ใช้งานโมดูลเสริมได้หลากหลาย
- ผ่าน database.build ที่พัฒนาบนพื้นฐานของ Supabase ผู้ใช้สามารถสร้างและเผยแพร่ฐานข้อมูล Postgres ด้วย AI ได้ ช่วยเพิ่มความยืดหยุ่นให้กับการพัฒนาฐานข้อมูลบนเว็บ
ภาพรวม
- PGlite คือ ฐานข้อมูล Postgres แบบฝังตัว ที่ทำงานบนสภาพแวดล้อม WASM(WebAssembly)
- สามารถรัน Postgres instance แบบเต็มรูปแบบได้ในเครื่อง
- รองรับการประมวลผลข้อมูลแบบตอบสนองและการซิงก์แบบเรียลไทม์
คุณสมบัติหลัก
- น้ำหนักเบา: มี Postgres build แบบสมบูรณ์ที่มีขนาด ต่ำกว่า 3MB เมื่อบีบอัดด้วย Gzip
- รันได้แม้ในเบราว์เซอร์หรือสภาพแวดล้อมไคลเอนต์ที่เบา
- ขยายความสามารถได้: สามารถเพิ่มความสามารถของ Postgres ได้หลากหลายผ่าน กลไกการโหลดส่วนขยายแบบไดนามิก
- รองรับส่วนขยาย pgvector เป็นค่าเริ่มต้น
- ตอบสนองได้ดี: มีฟังก์ชันในตัวสำหรับ การโหลดข้อมูล การซิงก์ และการคิวรีแบบเรียลไทม์
- เหมาะสำหรับการอัปเดตข้อมูลแบบเรียลไทม์และการสร้างแอปพลิเคชันแบบตอบสนอง
การทดลองใช้และการนำไปใช้
- สามารถสร้างและเผยแพร่ฐานข้อมูล Postgres ที่ใช้ PGlite ได้บนแพลตฟอร์ม database.build
- เป็นเครื่องมือที่ขับเคลื่อนด้วย AI ซึ่งสร้างโดย Supabase เพื่อให้ผู้ใช้สร้างฐานข้อมูลได้ด้วยตนเอง
- สามารถรัน PGlite Postgres instance ได้โดยตรงภายในเบราว์เซอร์
- รวม pgvector ไว้ด้วย
- สามารถทดลองส่วนขยายเพิ่มเติมได้ในสภาพแวดล้อม playground(REPL)
ความสำคัญ
- PGlite ขยายความสามารถของ Postgres มาสู่ระดับเบราว์เซอร์ ทำให้การรันฐานข้อมูลที่เน้นฝั่งไคลเอนต์เป็นไปได้
- ด้วยการผสาน ความเบา การขยายความสามารถ และการตอบสนอง เข้าด้วยกัน จึงถูกจับตามองว่าเป็นโซลูชันฐานข้อมูลที่เหมาะกับการพัฒนาเว็บแอปพลิเคชันยุคถัดไป
2 ความคิดเห็น
ผมเห็นบทความนี้แล้วเลยลองนำ PGlite มาใช้กับโปรเจกต์ของผมในเชิงทดลองดูครับ ต้องบอกว่าแค่การทดสอบแบบง่าย ๆ ก็ทั้งเร็วและดีมากจริง ๆ เลยครับ ต่อจากนี้ก็น่าคาดหวังมากครับ
ความคิดเห็นจาก Hacker News
ฉันทำงานอยู่ในทีม PGlite ดีใจที่ได้เห็นมันถูกนำมาแชร์บน HN อีกครั้ง
ช่วงหลังยอดดาวน์โหลดรายสัปดาห์ทะลุ 3 ล้านไปแล้ว และน่าจะถึง 4 ล้านในไม่ช้า — ดูได้ที่ หน้าแพ็กเกจ npm
เดิมทีเราสร้างมันขึ้นมาเพื่อฝังในเว็บแอป แต่ตอนนี้การใช้งานใน เครื่องมือนักพัฒนา และ สภาพแวดล้อม CLI กำลังเติบโตแบบก้าวกระโดด Google Firebase และ Prisma ก็ฝัง PGlite เข้าไปใน CLI ของตัวเองเพื่อจำลองผลิตภัณฑ์เซิร์ฟเวอร์เช่นกัน
หมายถึงการอ่านบล็อกจาก URL ระยะไกลด้วย range request แบบที่ DuckDB หรือ sql.js-httpvfs ทำ
ในแล็บของเราก็กำลังทำ โปรเจ็กต์ลักษณะนี้ อยู่ แต่ระบบนิเวศ http-vfs ยังอยู่ในระดับ ต้นแบบ เลยแทบไม่มีไลบรารีที่ปรับแต่งมาดี
แล้วก็สงสัยว่ารูปแบบการเข้าถึงดิสก์ของ PostgreSQL เหมาะกับ http-vfs มากกว่า SQLite หรือไม่
ถ้าใช่ และรองรับ network protocol ได้ด้วย ก็น่าจะยอดเยี่ยมมากสำหรับใช้ในสภาพแวดล้อม CI ของภาษาอื่นนอกเหนือจาก JS
เป้าหมายคือจะเป็นตัวแทนของ SQLite หรือ DuckDB หรือไม่
ฉันอยากใช้ PGlite ใน รันไทม์ที่ไม่ใช่ JavaScript
เช่น ฝังมันใน Go CLI ผ่าน WASM runtime เพื่อใช้แทน SQLite
จาก issue #89 ดูเหมือนจะมี third-party binding สำหรับ Rust อยู่แล้ว เลยสงสัยว่ามีแผนรองรับ binding ภาษาอื่นอย่างเป็นทางการหรือไม่
PGlite ยอดเยี่ยมมาก ฉันใช้มันเพื่อการพัฒนาเป็น PostgreSQL server ภายในเบราว์เซอร์
เซิร์ฟเวอร์ตัวนั้น implement PG protocol และเมื่อไคลเอนต์เชื่อมต่อ ก็จะส่ง query เข้าไปยังเบราว์เซอร์เพื่อให้ PGlite รันอยู่ข้างใน
สุดท้ายก็กลายเป็น PG server แบบเต็มภายในเบราว์เซอร์ — dbfor.dev
โปรเจ็กต์นี้น่าสนใจมาก หนึ่งในข้อเสียของ Postgres คือคุณต้องตั้งค่าเซิร์ฟเวอร์ตลอด และนี่ก็แก้ปัญหานั้นได้
สงสัยว่ามีวิธีคอมไพล์เป็น ไลบรารีเนทีฟ หรือไม่ ดูเหมือนโค้ดบางส่วนน่าจะนำกลับมาใช้ได้
สงสัยว่า ความต่าง ระหว่าง PGlite กับ SQLite คืออะไร
ปกติฉันใช้ SQLite เป็นหลักในสภาพแวดล้อมแบบ embedded และฝั่งไคลเอนต์บนเบราว์เซอร์
จุดแข็งของ SQLite คือความเรียบง่าย แต่ PGlite มีความสามารถด้านส่วนขยายที่น่าสนใจมาก เลยอยากรู้ว่าความต่างหลักของฐานข้อมูลสองตัวนี้คืออะไร
คุณอาจรันทดสอบได้เร็วด้วย SQLite แต่ถ้าโครงสร้างพื้นฐานจริงเป็น PostgreSQL คุณค่าของมันก็จะมีข้อจำกัด
สำหรับ unit test ฉันยังคงรัน Postgres บน Docker ผ่าน TestContainers อยู่
แต่ทางเลือกแบบนี้ก็ทำให้มีเครื่องมือทดสอบสำหรับ Python อย่าง py-pglite เกิดขึ้นได้
ถึงอย่างนั้น ฉันยังเชื่อมั่นมากกว่ากับแนวทางแบบ pgserver ที่ให้ Postgres จริงรันได้เบา ๆ ในรูปแบบแพ็กเกจ pip
ความเห็นของฉันอยู่ในมุมของ unit test ล้วน ๆ
ทีมของเราได้นำ PGlite เข้ามาใช้ในสภาพแวดล้อมทดสอบระหว่างสร้างบริการภายในตัวใหม่
เราทำ wrapper ให้ตอนทดสอบใช้ PGlite และตอนรันจริงใช้ Postgres instance ซึ่งได้ผลดีมาก
โดยเฉพาะฟีเจอร์
.clone()ที่ช่วยสร้าง checkpoint ของ DB เพื่อย้อนกลับไปยังสถานะเริ่มต้นก่อนแต่ละการทดสอบได้มันทำให้การรัน test suite 50 ชุดแบบขนานเป็นเรื่องง่ายมาก
ฉันใช้อยู่สำหรับการทดสอบ และมันให้ความรู้สึกเหมือน จุดกึ่งกลางระหว่าง SQLite แบบ in-memory กับ Postgres instance เต็มรูปแบบ
ฉันตามหาของแบบนี้มานานแล้ว และพอความเร็วในการทดสอบดีขึ้นก็พอใจมาก จนถึงตอนนี้แทบไม่มีข้อจำกัดอะไรเลย
ยังมี Doltgres ซึ่งเป็น Postgres แบบไฟล์ปฏิบัติการเดี่ยว ด้วย
ดาวน์โหลดไฟล์
.exeเดี่ยวแล้วรันได้ทันทีเหมือน Deno จากนั้น Postgres ก็ทำงานเลย — เอกสารติดตั้ง Doltgres