SQL-zentriertes Backend Alpha

Schnelle PostgreSQL-APIs.
Geringer Speicherbedarf.

Ein Rust-Modul für Nginx, das PostgreSQL-Funktionen über HTTP bereitstellt und Änderungen über WebSockets meldet.

GitHub

Wie pgxio den Aufwand reduziert

Nginx-Ereignisschleife

HTTP, WebSockets und nicht blockierende Datenbank-E/A teilen sich die Ereignisschleife von Nginx.

Wiederverwendete Datenbankverbindungen

Vorbereitete Anweisungen und Pipelining reduzieren wiederholte Arbeit und Datenbank-Roundtrips.

Keine erneute JSON-Serialisierung

Der JSONB-Antworttext von PostgreSQL wird unverändert weitergereicht. Bei deaktivierter Ausgabevalidierung entfällt auch das Parsen des Antwort-JSON.

Anfragen ohne Kopieren weiterleiten Experimentell

Der Build mit gepatchtem libpq vermeidet bei geeigneten Anfragen das Kopieren des Anfragekörpers in Rust und libpq. Automatisches Ausleihen greift bei geeigneten großen Anfragen über unverschlüsselte Datenbankverbindungen. Standard-Builds kopieren weiterhin.

Der obige Benchmark verwendete kopierte Puffer. Antworten und TLS erfordern weiterhin Kopien.

So funktioniert es

pgxio.confKonfigurationsauszug
# 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

    SQL-Funktionen schreiben

    SQL-Funktionen nehmen JSON an und geben JSON zurück. Sie übernehmen Abfragen, Geschäftsregeln und Autorisierung.

  2. 02

    Endpunkte explizit veröffentlichen

    Deklarieren Sie die Funktionen Ihrer API. pgxio prüft JWTs und ruft jede Funktion innerhalb einer Transaktion auf.

  3. 03

    Änderungen abonnieren

    Autorisierte WebSocket-Abonnements melden Änderungen. Ihr Client lädt den aktuellen Snapshot erneut über HTTP.

Browser / ClientHTTP + WebSocket
pgxio in NginxRust + nicht blockierendes libpq
PostgreSQLFunktionen + Benachrichtigungen

Abonnements liefern Änderungssignale, kein dauerhaftes Ereignisprotokoll. Nach einer erneuten Verbindung abonnieren Clients erneut und laden einen frischen Snapshot.

Lokal ausführen

Führen Sie diese Befehle aus einem vorhandenen pgxio-Checkout aus. Sie benötigen Docker Compose und Python 3.9 oder neuer.

Der enthaltene Entwicklungsstack bindet an localhost. pgxio ist Alpha-Software; diese Konfiguration dient dem lokalen Ausprobieren.

Terminal · in Ihrem pgxio-Checkout
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 '{}'