- PGlite là một giải pháp nhẹ cho phép chạy cục bộ một cơ sở dữ liệu Postgres hoàn chỉnh trong môi trường WASM
- Với kích thước dưới 3MB khi nén, có thể dễ dàng chạy trong trình duyệt hoặc môi trường client
- Tích hợp sẵn các tính năng nạp dữ liệu, đồng bộ hóa, truy vấn thời gian thực, cho phép xử lý dữ liệu phản ứng
- Hỗ trợ cơ chế nạp extension động, bao gồm pgvector, giúp tận dụng nhiều mô-đun mở rộng khác nhau
- Thông qua database.build dựa trên Supabase, có thể tạo và triển khai cơ sở dữ liệu Postgres bằng AI, tăng tính linh hoạt cho phát triển cơ sở dữ liệu trên web
Tổng quan
- PGlite là một cơ sở dữ liệu Postgres nhúng chạy trong môi trường WASM (WebAssembly)
- Có thể vận hành một instance Postgres hoàn chỉnh trong môi trường cục bộ
- Hỗ trợ xử lý dữ liệu phản ứng và đồng bộ thời gian thực
Tính năng chính
- Nhẹ: cung cấp bản dựng Postgres hoàn chỉnh dưới 3MB theo chuẩn nén Gzip
- Có thể chạy cả trong trình duyệt hoặc môi trường client nhẹ
- Khả năng mở rộng: có thể thêm nhiều tính năng mở rộng của Postgres thông qua cơ chế nạp extension động
- Hỗ trợ sẵn extension pgvector
- Tính phản ứng: bao gồm các tính năng tích hợp cho nạp dữ liệu, đồng bộ hóa, truy vấn thời gian thực
- Phù hợp để xây dựng ứng dụng phản ứng và cập nhật dữ liệu theo thời gian thực
Trải nghiệm và ứng dụng
- Có thể tạo và xuất bản cơ sở dữ liệu Postgres dựa trên PGlite trên nền tảng database.build
- Đây là công cụ dùng AI do Supabase xây dựng, cho phép người dùng tự tạo cơ sở dữ liệu
- Có thể chạy trực tiếp instance Postgres của PGlite ngay trong trình duyệt
- Bao gồm pgvector
- Có thể thử nghiệm thêm các extension trong môi trường playground(REPL)
Ý nghĩa
- PGlite mở rộng khả năng của Postgres xuống cấp độ trình duyệt, giúp việc chạy cơ sở dữ liệu theo hướng client-centric trở nên khả thi
- Kết hợp tính nhẹ, khả năng mở rộng và tính phản ứng, PGlite đang được chú ý như một giải pháp cơ sở dữ liệu phù hợp cho phát triển ứng dụng web thế hệ mới
2 bình luận
Sau khi đọc bài viết này, tôi đã thử đưa PGlite vào dự án của mình theo hướng thử nghiệm. Quả thật với những bài test đơn giản thì nó rất nhanh và rất ổn. Tôi vẫn rất kỳ vọng vào nó trong thời gian tới.
Ý kiến trên Hacker News
Tôi làm việc trong nhóm PGlite. Rất vui khi thấy nó lại được giới thiệu trên HN
Gần đây số lượt tải hằng tuần đã vượt 3 triệu và sắp chạm mốc 4 triệu — xem trang gói npm
Ban đầu chúng tôi tạo ra nó để nhúng vào web app, nhưng hiện nay mức sử dụng trong công cụ phát triển và môi trường CLI đang tăng bùng nổ. Google Firebase và Prisma cũng đang nhúng PGlite vào CLI của họ để mô phỏng các sản phẩm máy chủ
Ý tôi là kiểu đọc block từ URL từ xa bằng range request như DuckDB hoặc sql.js-httpvfs
Phòng thí nghiệm của chúng tôi cũng đang làm một dự án như thế này, nhưng hệ sinh thái http-vfs vẫn còn ở mức nguyên mẫu, gần như chưa có thư viện được tối ưu hóa
Tôi cũng tò mò liệu pattern truy cập đĩa của PostgreSQL có phù hợp với http-vfs hơn SQLite hay không
Nếu có, sẽ rất tuyệt nếu nó hỗ trợ giao thức mạng để có thể dùng trong môi trường CI của các ngôn ngữ ngoài JS
Tôi cũng tò mò liệu mục tiêu của nó có phải là trở thành lựa chọn thay thế cho SQLite hay DuckDB không
Tôi muốn dùng PGlite trong runtime không phải JavaScript
Ví dụ như nhúng nó vào Go CLI bằng runtime WASM để dùng thay cho SQLite
Issue #89 cho thấy dường như đã có binding bên thứ ba cho Rust, nên tôi tò mò liệu có kế hoạch chính thức hỗ trợ binding cho các ngôn ngữ khác không
PGlite thực sự rất xuất sắc. Tôi đang dùng nó cho mục đích phát triển như một PostgreSQL server chạy trong trình duyệt
Máy chủ triển khai giao thức PG, và khi client kết nối thì truy vấn được chuyển vào trình duyệt để PGlite chạy bên trong
Kết quả là một PG server hoàn chỉnh bên trong trình duyệt — dbfor.dev
Dự án này rất thú vị. Một trong những điểm yếu của Postgres là lúc nào cũng phải thiết lập máy chủ, và thứ này giải quyết đúng vấn đề đó
Tôi tò mò liệu có cách biên dịch nó thành thư viện native hay không. Có vẻ một phần mã có thể tái sử dụng được
Tôi tò mò về sự khác biệt giữa PGlite và SQLite
Tôi chủ yếu dùng SQLite trong môi trường nhúng và phía client trên trình duyệt
Ưu điểm của SQLite là sự đơn giản, còn PGlite thì các tính năng mở rộng đa dạng rất thú vị. Tôi muốn biết điểm khác biệt cốt lõi giữa hai cơ sở dữ liệu này là gì
Bạn có thể chạy test rất nhanh với SQLite, nhưng nếu hạ tầng thực tế là PostgreSQL thì giá trị của điều đó bị giới hạn
Trong unit test tôi vẫn chạy Postgres dựa trên Docker bằng TestContainers
Nhưng nhờ những lựa chọn thay thế như thế này mà các công cụ test cho Python như py-pglite cũng trở nên khả thi
Tuy vậy tôi vẫn tin tưởng hơn vào hướng như pgserver, tức là có thể chạy Postgres thật một cách gọn nhẹ dưới dạng gói pip
Dù sao thì đây chỉ là quan điểm của tôi dưới góc nhìn unit test
Nhóm chúng tôi đã đưa PGlite vào môi trường test khi xây dựng một dịch vụ nội bộ mới
Chúng tôi tạo một wrapper để khi test thì dùng PGlite, còn khi chạy thực tế thì dùng một instance Postgres, và kết quả rất thành công
Đặc biệt, tính năng
.clone()cho phép tạo checkpoint DB rồi đưa về trạng thái ban đầu trước mỗi bài testViệc chạy song song 50 test suite cũng trở nên rất dễ dàng
Tôi đang dùng nó cho mục đích test, và cảm giác nó giống như điểm ở giữa giữa SQLite in-memory và một instance Postgres đầy đủ
Tôi đã tìm thứ như thế này từ lâu, và rất hài lòng vì tốc độ test đã nhanh hơn. Tới giờ hầu như chưa thấy hạn chế gì đáng kể
Cũng có Doltgres, một Postgres ở dạng tệp thực thi đơn
Giống như Deno, bạn chỉ cần tải về một tệp
.exeduy nhất rồi chạy là Postgres hoạt động ngay — tài liệu cài đặt Doltgres