API SQL explícita · PostgreSQL 14–18 · Código abierto
Medido localmente · 15 sep 2026
839,678solicitudes/s · RESP MGET
3.31× el rendimiento de SQL preparado en esta comparación de una sola clave
SQL preparado
253,790 solicitudes/s
SQL mget
186,296 solicitudes/s
Apple M3 Max · PostgreSQL 16 · Go · 256 conexiones. Caché caliente, 1 clave/solicitud. Mediana de 3 × 5 segundos. SQL mget fue más lento aquí; los resultados por lotes difieren.Resultados, datos brutos y condiciones →
Una llamada. Dos recorridos de lectura.
Un acierto elegible devuelve la fila almacenada. Un fallo o una omisión lee la tabla de origen. Tus consultas SELECT habituales conservan su recorrido existente.
psql │ lecturas por clave primaria
-- 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[]
);
Ambos recorridos devuelven filas completas serializadas por la misma conexión de PostgreSQL. Una lectura elegible de la tabla de origen puede llenar la caché.
Hasta 1.024 claves por llamada. Se conservan el orden, los duplicados y las posiciones NULL.
Escrituras habituales
INSERT, UPDATE y DELETE invalidan las entradas afectadas.
Capacidad fija
Asigna la caché de filas compartida al iniciar PostgreSQL.
Comprobaciones de snapshot
Las lecturas no elegibles usan la tabla de origen conforme a las reglas de visibilidad de PostgreSQL.
Ejecuta la misma prueba. En cada cliente.
Node.js y Go. SQL preparado, SQL mget y RESP MGET.
Un mismo ejecutor usa las mismas claves, tamaños de lote, cantidades de conexiones, duración y comprobaciones de resultados. Compara rendimiento, latencia y CPU y memoria de PostgreSQL en tu máquina.
Consultas repetidas de filas completas por clave primaria.
Un conjunto pequeño y activo de filas completas.
READ COMMITTED en una primaria escribible.
Una aplicación que pueda llamar a la API SQL explícita.
Conserva el SQL habitual
Uniones, rangos, agregados o resultados de consultas arbitrarias.
Tablas con RLS, particionadas o heredadas.
Una base de datos donde no puedas instalar una extensión nativa.
Cargas de trabajo sin un beneficio medido.
Ejecuta una demo local.
Clona el repositorio e inicia un servidor PostgreSQL desechable con filas de ejemplo. Docker compila la extensión y mantiene la demo separada de tus bases de datos.
Se requieren Git y Docker Compose
git clone https://github.com/profundium/pg_local_cache.git
cd pg_local_cache
docker compose -f examples/compose.yaml up --build --wait
Recorre una carrera de caché aparte en la que una lectura antigua vuelve a llenar una clave eliminada después del commit. Entiende las vallas de publicación, los snapshots, el rollback y las cachés locales de las solicitudes.
Diseña una comparación justa de cachés de filas de PostgreSQL con SQL preparado, SQL mget y RESP MGET. Separa lecturas calientes, fallos, tamaños de lote, escrituras y costes del cliente.
Sustituye consultas de claves primarias N+1 conservando los ID duplicados, el orden de entrada, las posiciones NULL y las filas ausentes. Compara ANY, WITH ORDINALITY y SQL mget.
No. PostgreSQL almacena en caché las páginas de la base de datos. Esta extensión almacena por separado filas completas serializadas por clave primaria. Consulta la comparación de recorridos de lectura.
¿Almacena en caché las consultas SELECT habituales?
No. Solo las llamadas explícitas a local_cache.mget usan la caché SQL. Tus consultas existentes conservan el recorrido de ejecución normal de PostgreSQL.
¿Reemplaza a Redis?
No. El endpoint RESP2 opcional es limitado. No ofrece un conjunto general de comandos de Redis, TTL, pub/sub ni coordinación distribuida. Compara los recorridos de caché aparte de PostgreSQL y Redis.
¿Cómo compruebo las actualizaciones y el rollback?
La guía de invalidación incluye una prueba con dos sesiones. El ejemplo ejecutable comprueba escrituras no confirmadas, lectura de los propios cambios, rollback y actualizaciones confirmadas.