key e un campo value ti offre un archivio di tipo key-value durevole, con ambito limitato allo spazio di lavoro, interrogabile tramite lo stesso client API tipizzato che usi già per i record.
Definisci l’oggetto store
Dichiara un oggetto personalizzato con due campi —key (un TEXT univoco) e value (un RAW_JSON così puoi archiviare qualsiasi payload serializzabile in JSON). Consulta Objects per la documentazione completa di defineObject.
src/objects/kv-store.object.ts
Imponi l’univocità della chiave
Aggiungi un indice univoco sukey in modo che la stessa chiave non possa mai avere due righe. Questo è il costrutto consigliato per l’univocità — vedi Data → Unique indexes.
src/indexes/kv-store-key.index.ts
Leggi e scrivi da una funzione di logica
Incapsula l’oggetto dietro a pochi piccoli helper in modo che il resto del tuo codice assomigli a un’API key-value —get, set e del. Usano CoreApiClient, che è generato dallo schema del tuo spazio di lavoro ed è completamente tipizzato rispetto all’oggetto kvStore.
src/logic-functions/handlers/kv-store.ts
L’indice univoco protegge dai duplicati, ma due esecuzioni che scrivono la stessa nuova chiave nello stesso istante possono comunque entrare in race condition tra la ricerca e la creazione. Considera una creazione che non riesce a causa del vincolo di univocità come “qualcun altro ha vinto” — intercettala e rileggi, oppure riprova come aggiornamento.
Usalo: metti in cache una chiamata costosa
Un uso tipico consiste nel mettere in cache una risposta lenta o soggetta a limitazione di frequenza da parte di terzi, così che le esecuzioni ripetute la riutilizzino invece di sostenerne il costo ogni volta.src/logic-functions/getExchangeRate.logic-function.ts
Pattern e suggerimenti
- Namespace. Anteponi prefissi alle chiavi per tenere separate le varie aree di interesse e per rendere semplici le ricerche in blocco —
sync-cursor:linear,cache:exchange-rate:USD:EUR,lock:nightly-report. Filtra conkey: { like: 'cache:%' }per elencare o cancellare un intero namespace. - Scadenza (TTL). Lo store non ha una scadenza integrata. Archivia un timestamp all’interno del
value(come nell’esempio di cache) e verificalo in lettura, oppure aggiungi un campoDATE_TIMEe cancella periodicamente le righe obsolete da una funzione attivata da cron. - Cosa archiviare.
RAW_JSONcontiene qualsiasi valore serializzabile in JSON — numeri, stringhe, array, oggetti. Mantieni ridotte le dimensioni delle voci; questo meccanismo serve per coordinamento e caching, non per grandi blob o file. Per i file, usa un campoFILESeuploadFile. - Visibilità e autorizzazioni. Le righe risiedono nel database dello spazio di lavoro come qualsiasi altro record, quindi sono interrogabili tramite l’API e rispettano il ruolo della tua app. Per tenere lo store fuori dall’interfaccia principale, escludilo dal tuo navigation menu.
- Limitare l’ambito a un record. Hai bisogno di uno stato per record invece che di chiavi globali? Aggiungi una relation dall’oggetto store all’oggetto di destinazione invece di codificare l’id nella chiave.
Questa è una convenzione, non una funzionalità separata — il “KV Store” è semplicemente un normale oggetto personalizzato che definisci e interroghi con le API standard. Questo significa che beneficia dello stesso meccanismo di sincronizzazione, delle stesse autorizzazioni e degli stessi strumenti del resto dei dati della tua app.