Zum Hauptinhalt springen
Logikfunktionen laufen isoliert in kurzlebigen Node.js-Prozessen – sobald ein Durchlauf abgeschlossen ist, überlebt nichts, was im Speicher gehalten wurde. Wenn Sie sich zwischen Durchläufen etwas merken müssen (eine teure API-Antwort zwischenspeichern, einen Cursor für inkrementelle Synchronisierungen speichern, Arbeit entprellen oder Zustand von einer Funktion an eine andere übergeben), speichern Sie es in der Workspace-Datenbank. Dafür benötigen Sie kein spezielles Speicher-Primitiv: Ein kleines technisches Objekt mit einem key-Feld und einem value-Feld gibt Ihnen einen dauerhaften Key-Value-Store, der auf den Workspace begrenzt ist und über denselben typisierten API-Client abfragbar ist, den Sie bereits für Datensätze verwenden.

Das Store-Objekt definieren

Deklarieren Sie ein benutzerdefiniertes Objekt mit zwei Feldern – key (ein eindeutiger TEXT) und value (ein RAW_JSON, damit Sie jede JSON-serialisierbare Nutzlast speichern können). Siehe Objekte für die vollständige defineObject-Referenz.
src/objects/kv-store.object.ts

Eindeutigkeit des Schlüssels erzwingen

Fügen Sie einen eindeutigen Index auf key hinzu, damit derselbe Schlüssel niemals zwei Zeilen haben kann. Dies ist das empfohlene Primitiv für Eindeutigkeit – siehe Daten → Eindeutige Indizes.
src/indexes/kv-store-key.index.ts

Aus einer Logikfunktion lesen und schreiben

Kapseln Sie das Objekt hinter ein paar kleinen Hilfsfunktionen, sodass der Rest Ihres Codes wie eine Key-Value-API aussieht – get, set und del. Sie verwenden CoreApiClient, der aus Ihrem Workspace-Schema generiert wird und vollständig gegen das kvStore-Objekt typisiert ist.
src/logic-functions/handlers/kv-store.ts
Der eindeutige Index schützt vor Duplikaten, aber zwei Durchläufe, die denselben neuen Schlüssel im gleichen Moment schreiben, können zwischen der Abfrage und dem Erstellen dennoch in eine Race-Condition geraten. Behandeln Sie einen Erstellvorgang, der an der Eindeutigkeitsbeschränkung scheitert, als „jemand anderes war schneller“ – fangen Sie den Fehler ab und lesen Sie erneut, oder versuchen Sie es als Aktualisierung noch einmal.

Verwenden Sie ihn: einen teuren Aufruf zwischenspeichern

Eine typische Verwendung ist das Zwischenspeichern einer langsamen oder ratelimitierten Antwort eines Drittanbieters, sodass wiederholte Durchläufe sie wiederverwenden, anstatt jedes Mal die Kosten zu tragen.
src/logic-functions/getExchangeRate.logic-function.ts

Muster & Tipps

  • Namespacing. Präfixieren Sie Schlüssel, um unterschiedliche Belange getrennt zu halten und Bulk-Abfragen zu erleichtern – sync-cursor:linear, cache:exchange-rate:USD:EUR, lock:nightly-report. Filtern Sie mit key: { like: 'cache:%' }, um einen gesamten Namespace aufzulisten oder zu leeren.
  • Ablauf (TTL). Der Store hat keine eingebaute Ablaufzeit. Speichern Sie einen Zeitstempel innerhalb des value (wie im Cache-Beispiel) und prüfen Sie ihn beim Lesen, oder fügen Sie ein DATE_TIME-Feld hinzu und löschen Sie regelmäßig veraltete Zeilen aus einer cron-getriggerten Funktion.
  • Was gespeichert wird. RAW_JSON enthält jeden JSON-serialisierbaren Wert – Zahlen, Zeichenketten, Arrays, Objekte. Halten Sie Einträge klein; dies ist für Koordination und Caching gedacht, nicht für große Blobs oder Dateien. Für Dateien verwenden Sie ein FILES-Feld und uploadFile.
  • Sichtbarkeit & Berechtigungen. Zeilen befinden sich wie jeder andere Datensatz in der Workspace-Datenbank, sind also über die API abfragbar und respektieren die Rolle Ihrer App. Um den Store aus dem Haupt-UI herauszuhalten, führen Sie ihn nicht in Ihrem Navigationsmenü auf.
  • Auf einen Datensatz begrenzen. Sie benötigen zustandsspezifische Daten pro Datensatz statt globaler Schlüssel? Fügen Sie vom Store-Objekt eine Relation zum Zielobjekt hinzu, anstatt die ID in den Schlüssel zu kodieren.
Dies ist eine Konvention, keine separate Funktion – der „KV Store“ ist einfach ein reguläres benutzerdefiniertes Objekt, das Sie definieren und mit der Standard-API abfragen. Das bedeutet, er profitiert von derselben Synchronisierung, denselben Berechtigungen und denselben Tools wie die übrigen Daten Ihrer App.