feat(search): persistenter Thumbnail-Cache in SQLite, Default-TTL 30 Tage
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 54s
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 54s
Vorher: In-Memory-Map, TTL 30 Minuten. Container-Neustart verwarf den kompletten Cache, also musste nach jedem Deploy jede Suche wieder alle Seiten laden. Jetzt: - Neue Tabelle thumbnail_cache (url PK, image, expires_at) - Default-TTL 30 Tage, per Env KOCHWAS_THUMB_TTL_DAYS konfigurierbar (7, 365, was der User will — is alles ok laut Nutzer) - Negative Cache: Seiten ohne Bild werden mit image=NULL gespeichert, damit wir nicht jede Suche die gleiche kaputte Seite wieder laden - Lazy-Cleanup: pro searchWeb-Aufruf werden abgelaufene Zeilen via DELETE ... WHERE expires_at <= now() weggeräumt (Index-Scan, billig) Migration 003_thumbnail_cache.sql: nicht-destruktiv, nur neue Tabelle. Bestehende DB bekommt sie beim nächsten Start automatisch dazu. Tests (99/99): - Neuer Cache-Test: zweiter searchWeb für dieselbe URL macht keinen Page-Fetch mehr und liest die image-Spalte aus SQLite.
This commit is contained in:
10
src/lib/server/db/migrations/003_thumbnail_cache.sql
Normal file
10
src/lib/server/db/migrations/003_thumbnail_cache.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- Long-term cache for page → image URL mappings extracted via og:image,
|
||||
-- JSON-LD, or first content <img>. Fetching every recipe page on every
|
||||
-- search is expensive; store the mapping with a 30-day default TTL.
|
||||
CREATE TABLE thumbnail_cache (
|
||||
url TEXT PRIMARY KEY,
|
||||
image TEXT, -- NULL = page has no image (cache the negative too)
|
||||
expires_at TEXT NOT NULL -- ISO-8601 UTC
|
||||
);
|
||||
|
||||
CREATE INDEX idx_thumbnail_cache_expires ON thumbnail_cache(expires_at);
|
||||
Reference in New Issue
Block a user