JSONL Store
Verwenden Sie diesen Skill, wenn ein geplanter Job sich merken muss, was er bereits getan hat – ausgelöste Warnungen, verarbeitete IDs, erfasste Ereignisse – aber eine Datenbank übertrieben ist. JSON Lines (ein JSON-Objekt pro Zeile) ist append-freundlich, menschenlesbar, grep-bar und streamt ohne die gesamte Datei zu laden. Dieser Helfer fügt atomare Anhängevorgänge, gestreamte Lesevorgänge, die auch bei einer beschädigten Zeile funktionieren, und append_unique(record, key) hinzu, sodass dieselbe ID nie zweimal geschrieben wird.
Wann verwenden
- Der Benutzer sagt: „Ergebnisse in eine JSONL-Datei protokollieren“, „Ereignisse an die Festplatte anhängen“, „nach ID über Ausführungen hinweg deduplizieren“, „einen einfachen Verlauf ohne Datenbank führen“.
- Ein Cron/geplantes Skript benötigt einen dauerhaften Zustand zwischen den Ausführungen in einer einfachen Datei.
Wann NICHT verwenden
- Sie benötigen Abfragen, Indizes oder gleichzeitige Schreiber – verwenden Sie SQLite (
sqlite-state) oder eine echte Datenbank. - Datensätze sind riesig oder binär – JSONL ist für kleine strukturierte Zeilen.
Konkretes Beispiel
Benutzereingabe:
Nach jeder Ausführung neue Warnungen an alerts.jsonl anhängen, aber niemals dieselbe Warnungs-ID zweimal.
Ausgabe:
# Kopieren Sie assets/store.py in Ihr Projekt, dann:
from store import JsonlStore
store = JsonlStore("data/alerts.jsonl")
for alert in new_alerts:
if store.append_unique(alert, key="id"):
send(alert) # wird nur für IDs ausgelöst, die in keiner vorherigen Ausführung gesehen wurden
print("Historiengröße:", store.count())
Lesevorgänge streamen Zeile für Zeile, sodass ein Jahr Historie nie vollständig in den Speicher geladen wird, und eine halbgeschriebene letzte Zeile nach einem Absturz wird übersprungen, anstatt die nächste Ausführung zu unterbrechen.
Anzuwendendes Muster
- Ein JSON-Objekt pro Zeile; mit
ensure_ascii=Falseanhängen, damit Text lesbar bleibt. - Lesevorgänge mit einem Generator streamen; leere/beschädigte Zeilen überspringen, statt einen Fehler zu werfen.
- Deduplizieren mit
seen_keys(key)/append_unique(record, key), um Ausführungen idempotent zu machen. - Mit einem Scheduler kombinieren, sodass die Datei der dauerhafte Speicher zwischen den Aufrufen ist.
Referenz: assets/store.py.
Quelle
Abgeleitet aus der Zustandsverwaltung des geplanten Bots des Autors. v1.0.0. Siehe auch: [[sqlite-state]], [[cron-dispatch]], [[pipeline-orchestrator]].
→ Bauen Sie den vollständig ausführbaren Bot mit Trawlkit.