key и полем value даёт вам надёжное key-value-хранилище, ограниченное рабочим пространством и доступное для запросов через тот же типизированный API-клиент, который вы уже используете для записей.
Определите объект хранилища
Объявите настраиваемый объект с двумя полями —key (уникальный TEXT) и value (RAW_JSON, чтобы можно было сохранять любые JSON-сериализуемые данные). См. Objects для полной справки по defineObject.
src/objects/kv-store.object.ts
Обеспечьте уникальность ключей
Добавьте уникальный индекс наkey, чтобы один и тот же ключ никогда не мог иметь две строки. Это рекомендуемый примитив для обеспечения уникальности — см. Data → Unique indexes.
src/indexes/kv-store-key.index.ts
Чтение и запись из логической функции
Спрячьте объект за несколькими небольшими вспомогательными функциями, чтобы остальной код выглядел как key-value API —get, set и del. Они используют CoreApiClient, который генерируется из схемы вашего рабочего пространства и полностью типизирован относительно объекта kvStore.
src/logic-functions/handlers/kv-store.ts
Уникальный индекс защищает от дубликатов, но два запуска, записывающие один и тот же новый ключ в один и тот же момент, всё ещё могут войти в гонку между поиском и созданием. Рассматривайте создание, которое завершилось сбоем по ограничению уникальности, как «кто-то другой успел первым» — перехватите его и перечитайте, или повторите попытку как обновление.
Использование: кэширование дорогого вызова
Типичный сценарий — кэширование медленного или ограниченного по частоте ответа стороннего сервиса, чтобы при повторных запусках переиспользовать его, а не нести затраты каждый раз.src/logic-functions/getExchangeRate.logic-function.ts
Шаблоны и советы
- Пространства имён. Добавляйте префиксы к ключам, чтобы разделять разные задачи и упростить массовые выборки —
sync-cursor:linear,cache:exchange-rate:USD:EUR,lock:nightly-report. Фильтруйте поkey: { like: 'cache:%' }, чтобы перечислить или очистить целое пространство имён. - Срок жизни (TTL). У хранилища нет встроенного механизма истечения срока действия. Сохраняйте метку времени внутри
value(как в примере с кэшем) и проверяйте её при чтении, или добавьте полеDATE_TIMEи периодически очищайте устаревшие строки из функции, запускаемой по cron. - Что хранить.
RAW_JSONможет содержать любое JSON-сериализуемое значение — числа, строки, массивы, объекты. Держите записи небольшими; это для координации и кэширования, а не для больших блобов или файлов. Для файлов используйте полеFILESиuploadFile. - Видимость и разрешения. Строки живут в базе данных рабочего пространства как любые другие записи, поэтому к ним можно обращаться через API, и они подчиняются ролям вашего приложения. Чтобы скрыть хранилище из основного пользовательского интерфейса, не добавляйте его в навигационное меню.
- Привязка к записи. Нужно состояние на уровне отдельной записи вместо глобальных ключей? Добавьте relation из объекта хранилища к целевому объекту вместо кодирования идентификатора в ключе.
Это соглашение, а не отдельная функция — «KV Store» — это просто обычный настраиваемый объект, который вы определяете и к которому обращаетесь с помощью стандартного API. Это значит, что он получает преимущества той же синхронизации, системы разрешений и инструментов, что и остальные данные вашего приложения.