Backend berpusat pada SQL Alfa

API PostgreSQL cepat.
Hemat memori.

Modul Rust untuk Nginx yang menyediakan fungsi PostgreSQL melalui HTTP dan mengirim pemberitahuan perubahan melalui WebSocket.

GitHub

Cara pgxio mengurangi beban tambahan

Loop peristiwa Nginx

HTTP, WebSocket, dan I/O basis data nonblokir berbagi loop peristiwa Nginx.

Koneksi basis data digunakan kembali

Pernyataan yang disiapkan dan pipelining mengurangi pekerjaan berulang serta perjalanan bolak-balik ke basis data.

Tanpa serialisasi ulang JSON

Teks respons JSONB dari PostgreSQL diteruskan tanpa perubahan. Menonaktifkan validasi keluaran juga menghindari penguraian JSON respons.

Penerusan permintaan tanpa salinan Eksperimental

Build dengan libpq yang ditambal menghilangkan salinan isi permintaan ke Rust dan libpq untuk permintaan yang memenuhi syarat. Peminjaman buffer otomatis berlaku untuk permintaan besar yang memenuhi syarat melalui koneksi basis data tanpa enkripsi. Build standar tetap menyalin.

Uji di atas memakai buffer yang disalin. Respons dan TLS masih melibatkan salinan.

Cara kerja

pgxio.confCuplikan konfigurasi
# HTTP endpoints
pgxio_endpoint list_tasks
  web.list_tasks read_only;

pgxio_endpoint create_task
  web.create_task;

# WebSocket subscription authorization
pgxio_stream tasks
  web.authorize_tasks;
  1. 01

    Tulis fungsi SQL

    Fungsi SQL menerima dan mengembalikan JSON. Fungsi menangani kueri, aturan bisnis, dan otorisasi.

  2. 02

    Publikasikan endpoint secara eksplisit

    Deklarasikan fungsi yang disediakan API. pgxio memeriksa JWT dan memanggil setiap fungsi di dalam transaksi.

  3. 03

    Berlangganan perubahan

    Langganan WebSocket yang diotorisasi memberi sinyal perubahan. Klien mengambil ulang snapshot terkini melalui HTTP.

Browser / klienHTTP + WebSocket
pgxio di dalam NginxRust + libpq nonblokir
PostgreSQLFungsi + pemberitahuan

Langganan mengirim sinyal perubahan, bukan log peristiwa permanen. Saat tersambung kembali, klien berlangganan ulang dan mengambil snapshot terbaru.

Jalankan secara lokal

Jalankan perintah ini dari salinan sumber pgxio yang sudah ada. Diperlukan Docker Compose dan Python 3.9 atau lebih baru.

Lingkungan pengembangan yang disertakan mendengarkan di localhost. pgxio adalah perangkat lunak alfa; konfigurasi ini untuk eksplorasi lokal.

Terminal · dari salinan sumber pgxio
bin/pgxio init
bin/pgxio up
TOKEN=$(bin/pgxio token alice)

curl http://localhost:8080/v1/create_task \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"title":"Hello from pgxio"}'

curl http://localhost:8080/v1/list_tasks \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'