Explizite SQL-API · PostgreSQL 14–18 · Open Source
Lokal gemessen · 15. Sep. 2026
839,678Anfragen/s · RESP MGET
3.31× der vorbereiteten SQL-Rate in diesem Vergleich mit einem Schlüssel
Vorbereitetes SQL
253,790 Anfragen/s
SQL mget
186,296 Anfragen/s
Apple M3 Max · PostgreSQL 16 · Go · 256 Verbindungen. Aufgewärmter Cache, 1 Schlüssel/Anfrage. Median aus 3 × 5 Sekunden. SQL mget war hier langsamer; Batch-Ergebnisse weichen ab.Ergebnisse, Rohdaten und Bedingungen →
Ein Aufruf. Zwei Lesepfade.
Ein geeigneter Treffer gibt die gespeicherte Zeile zurück. Ein Fehltreffer oder Bypass liest die Quelltabelle. Ihre gewöhnlichen SELECT-Abfragen behalten ihren bisherigen Pfad.
psql │ Lesevorgänge per Primärschlüssel
-- Attach your table once.SELECT local_cache.attach_table('public.items');
-- Read rows by primary key.SELECT local_cache.mget(
'public.items', ARRAY[42, 7]::bigint[]
);
Beide Pfade geben serialisierte vollständige Zeilen über dieselbe PostgreSQL-Verbindung zurück. Ein geeigneter Lesevorgang aus der Quelltabelle kann den Cache füllen.
Bis zu 1.024 Schlüssel pro Aufruf. Reihenfolge, Duplikate und NULL-Positionen bleiben erhalten.
Gewöhnliche Schreibvorgänge
INSERT, UPDATE und DELETE invalidieren betroffene Einträge.
Feste Kapazität
Allokieren Sie den gemeinsamen Zeilen-Cache beim Start von PostgreSQL.
Snapshot-Prüfungen
Nicht geeignete Lesevorgänge verwenden die Quelltabelle gemäß den Sichtbarkeitsregeln von PostgreSQL.
Führen Sie denselben Test aus. Mit jedem Client.
Node.js und Go. Vorbereitetes SQL, SQL mget und RESP MGET.
Ein Runner verwendet dieselben Schlüssel, Batch-Größen, Verbindungszahlen, Dauer und Ergebnisprüfungen. Vergleichen Sie Durchsatz, Latenz sowie CPU und Speicher von PostgreSQL auf Ihrem Rechner.
READ COMMITTED auf einem beschreibbaren primären Server.
Eine Anwendung, die die explizite SQL-API aufrufen kann.
Gewöhnliches SQL beibehalten
Joins, Bereiche, Aggregate oder beliebige Abfrageergebnisse.
RLS-, partitionierte oder vererbte Tabellen.
Eine Datenbank, in der Sie keine native Erweiterung installieren können.
Arbeitslasten ohne gemessenen Nutzen.
Lokale Demo starten.
Klonen Sie das Repository und starten Sie einen verworfenen PostgreSQL-Server mit Beispielzeilen. Docker baut die Erweiterung und hält die Demo von Ihren Datenbanken getrennt.
Git und Docker Compose erforderlich
git clone https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
docker compose -f examples/compose.yaml up --build --wait
Ein Cache-aside-Rennen nachvollziehen, bei dem ein alter Lesevorgang nach dem Commit einen gelöschten Schlüssel erneut füllt. Veröffentlichungs-Sperren, Snapshots, Rollback und anfragebezogene Caches verstehen.
Einen fairen Vergleich für PostgreSQL-Zeilen-Caching mit vorbereitetem SQL, SQL mget und RESP MGET entwerfen. Warme Lesevorgänge, Fehltreffer, Batch-Größen, Schreibvorgänge und Client-Kosten trennen.
Ersetzen Sie N+1-Abfragen per Primärschlüssel und bewahren Sie dabei doppelte IDs, Eingabereihenfolge, NULL-Positionen und fehlende Zeilen. Vergleichen Sie ANY, WITH ORDINALITY und SQL mget.
Nein. PostgreSQL cached Datenbankseiten. Diese Erweiterung cached separat serialisierte vollständige Zeilen per Primärschlüssel. Siehe den Vergleich der Lesepfade.
Cached es gewöhnliche SELECT-Abfragen?
Nein. Nur explizite Aufrufe von local_cache.mget verwenden den SQL-Cache. Ihre bestehenden Abfragen behalten den normalen PostgreSQL-Ausführungspfad.
Ersetzt es Redis?
Nein. Der optionale RESP2-Endpunkt ist begrenzt. Es gibt weder einen allgemeinen Redis-Befehlssatz noch TTL, Pub/Sub oder verteilte Koordination. Vergleichen Sie die PostgreSQL- und Redis-Cache-aside-Pfade.
Wie prüfe ich Updates und Rollback?
Der Invalidation-Leitfaden enthält einen Test mit zwei Sitzungen. Das ausführbare Beispiel prüft nicht bestätigte Schreibvorgänge, Read-your-writes, Rollback und bestätigte Updates.