Data Store в n8n: Полное руководство по встроенному механизму хранения данных
Data Store (хранилище данных) в n8n — это встроенный, легковесный механизм для сохранения и извлечения небольших объемов данных непосредственно внутри рабочего пространства n8n. Он функционирует как ключ-значение хранилище, интегрированное в платформу, и не требует настройки внешних баз данных или сервисов для базовых операций хранения. Data Store предназначен для сценариев, где необходимо сохранять промежуточные результаты, конфигурации, состояние workflows или любые другие данные между запусками рабочих процессов или даже между разными рабочими процессами.
Архитектура и принцип работы Data Store
Data Store в n8n реализован как часть внутренней инфраструктуры платформы. При использовании встроенной базы данных SQLite (режим по умолчанию для самостоятельного развертывания) данные хранятся в таблице внутри файла базы данных n8n. При использовании внешних СУБД, таких как PostgreSQL или MySQL, Data Store использует соответствующую таблицу в этой базе. Это обеспечивает целостность и резервное копирование данных в рамках общей процедуры бэкапа n8n. Доступ к Data Store осуществляется исключительно через специальные узлы (ноды), что обеспечивает контролируемый и безопасный интерфейс для операций чтения и записи.
Ключевые узлы для работы с Data Store
Для взаимодействия с Data Store в редакторе n8n предусмотрены два основных узла, расположенных в палитре узлов в категории «Core Nodes»:
- Set (Установить): Этот узел используется для сохранения (записи) данных в хранилище. Он принимает пару «ключ-значение», где ключ — это строка, идентифицирующая данные, а значение — любые данные, которые нужно сохранить (строка, число, объект, массив).
- Get (Получить): Этот узел используется для извлечения (чтения) данных из хранилища по указанному ключу. Он возвращает значение, ранее сохраненное с этим ключом.
- Кэширование данных API: Сохранение результатов дорогостоящих вызовов внешних API на определенный период времени для уменьшения нагрузки на внешние сервисы и ускорения выполнения workflow.
- Хранение состояния (State Management): Отслеживание состояния длительного процесса. Например, запоминание последней обработанной записи, даты последнего успешного запуска или текущего шага в многоэтапной операции.
- Обмен данными между workflows: Создание канала связи между независимыми рабочими процессами. Один workflow может вычислять и сохранять конфигурационные параметры (например, коэффициенты, пороговые значения), которые будут использоваться множеством других workflows.
- Счетчики и агрегация: Реализация простых счетчиков, например, для подсчета количества обработанных элементов за день или количества срабатываний триггера.
- Хранение конфигураций: Централизованное хранение настроек, токенов доступа (с осторожностью) или параметров, которые могут изменяться и использоваться в разных частях автоматизации.
- Operation: Выбор операции. Основные операции: «Set» (сохранить/перезаписать) и «Delete» (удалить ключ).
- Key: Имя ключа для сохранения данных. Ключ является строкой и должен быть уникальным идентификатором. Рекомендуется использовать осмысленные и структурированные имена (например,
last_processed_id_campaign_123). - Value: Данные, которые необходимо сохранить. Поддерживаются все типы данных n8n (строки, числа, объекты JSON, массивы). Значение можно задать статически или динамически, используя выражение (Expression).
- Scope: Важнейший параметр, определяющий область видимости данных.
- Workflow: Данные привязаны к конкретному workflow. Даже если ключ совпадает с ключом из другого workflow, данные будут изолированы. Это рекомендуемый и безопасный вариант по умолчанию.
- Global: Данные доступны из любого workflow в экземпляре n8n. Используется для обмена данными между разными процессами.
- Operation: Выбор операции. Основные операции: «Get» (получить значение по ключу) и «Get Many» (получить список всех ключей или ключей по шаблону).
- Key: Имя ключа, данные которого нужно извлечь. Должен точно соответствовать ключу, использованному при сохранении.
- Scope: Область видимости, из которой нужно читать данные. Должна соответствовать области, указанной при записи (Workflow или Global).
- Destination Key: Имя поля, в которое будут помещены полученные данные в выходном элементе (item). По умолчанию используется
data. - Не для больших данных: Data Store не предназначен для хранения больших массивов данных, файлов или полноценных бизнес-сущностей. Для этого используйте внешние базы данных.
- Структура ключей: Используйте последовательную и понятную схему именования ключей. Рекомендуется использовать префиксы, связанные с проектом или workflow (напр.,
marketing_campaign:state). - Безопасность: Не храните в Data Store пароли, секретные ключи или высокочувствительные данные в открытом виде. Для хранения секретов используйте Credentials n8n или специализированные сервисы (HashiCorp Vault).
- Область видимости (Scope): По умолчанию используйте Scope: Workflow для избежания непреднамеренных конфликтов между разными процессами. Global Scope применяйте осознанно.
- Миграция и резервное копирование: Данные Data Store включены в общий бэкап базы данных n8n. При миграции экземпляра n8n они переносятся вместе с базой.
Работа этих узлов глобальна в рамках одного экземпляра n8n. Данные, сохраненные одним рабочим процессом, могут быть извлечены другим, если известен ключ.
Типичные сценарии использования Data Store
Подробное описание узла «Set» (Установить)
Узел «Set» имеет следующие конфигурируемые параметры:
Подробное описание узла «Get» (Получить)
Узел «Get» имеет следующие конфигурируемые параметры:
Сравнение Data Store с другими методами хранения в n8n
| Метод хранения | Назначение | Объем данных | Сложность | Производительность | Пример использования |
|---|---|---|---|---|---|
| Data Store | Ключ-значение хранилище для служебных данных, состояния, кэша. | Небольшой (КБ). | Низкая (встроенные узлы). | Высокая (локальный доступ). | Сохранение timestamp последнего запуска. |
| Временные поля (Binary/JSON Data) | Хранение данных в рамках одного выполнения workflow. | От КБ до МБ (для binary). | Средняя (работа с полями items). | Зависит от объема. | Передача файла между узлами в одном workflow. |
| Внешняя база данных (PostgreSQL, MySQL и т.д.) | Структурированное хранение больших объемов бизнес-данных. | Неограниченный (ГБ, ТБ). | Высокая (настройка БД, SQL). | Зависит от БД и запросов. | Хранение заказов, клиентов, транзакций. |
| Файловая система / Облачные хранилища (S3) | Хранение файлов, документов, медиа. | Неограниченный. | Средняя (работа с файлами). | Зависит от сети и хранилища. | Архивирование входящих вложений email. |
Практические примеры реализации
Пример 1: Кэширование курса валют
Workflow, запускаемый по расписанию каждый час, получает курс USD/EUR с внешнего API. Он сохраняет его в Data Store с ключом usd_eur_rate и областью видимости Global. Другие workflows, которым нужен этот курс для расчетов, используют узел Get для его получения, избегая лишних вызовов API.
Пример 2: Контроль последней обработанной записи
Workflow, синхронизирующий данные из CRM, после каждой успешной обработки записи сохраняет ее ID в Data Store с ключом last_processed_contact_id (Scope: Workflow). При следующем запуске workflow сначала читает этот ID и использует его в фильтре API-запроса (?createdAfter=ID), чтобы обрабатывать только новые записи.
Ограничения и лучшие практики
Расширенные возможности и интеграции
Хотя базовые узлы Set и Get покрывают большинство потребностей, сложные сценарии могут требовать дополнительной логики. Например, для реализации TTL (Time-To-Live, времени жизни записи) необходимо вручную сохранять вместе со значением метку времени его создания, а при чтении проверять ее актуальность. Для массовых операций или сложных запросов (поиск по значению, агрегация) всегда предпочтительнее использовать узел соответствующей базы данных (например, «PostgreSQL»), подключенный к внешней СУБД.
Ответы на часто задаваемые вопросы (FAQ)
Где физически хранятся данные Data Store?
Данные хранятся в таблице key_value_store в той базе данных, которую использует ваш экземпляр n8n (SQLite, PostgreSQL, MySQL).
Можно ли очистить или экспортировать все данные Data Store?
Прямого интерфейса в UI для массового удаления или экспорта нет. Очистка может быть выполнена через SQL-запрос к базе данных n8n (например, DELETE FROM key_value_store;) или путем создания workflow, который использует операцию «Delete» в узле Set для известных ключей. Экспорт также возможен через прямой SQL-запрос на выборку.
В чем разница между Data Store и переменными Workflow (Workflow Variables)?
Workflow Variables — это статические значения, задаваемые в настройках workflow. Они не могут быть изменены в ходе выполнения workflow. Data Store — динамическое хранилище, значения в котором можно читать и записывать во время выполнения workflow, и они сохраняются между запусками.
Ограничен ли размер значения для одного ключа?
Строгих ограничений в интерфейсе нет, но из-за архитектурных особенностей СУБД и предназначения Data Store не рекомендуется хранить значения размером более нескольких килобайт. Большие объекты JSON или тексты могут негативно сказаться на производительности.
Можно ли использовать Data Store в n8n Cloud?
Да, функционал Data Store полностью доступен в облачной версии n8n. Принципы работы и ограничения идентичны самостоятельному развертыванию.
Как обеспечить атомарность операций (например, инкремент счетчика) при параллельных запусках workflow?
Базовые узлы Set/Get не обеспечивают атомарных операций. Если два экземпляра workflow одновременно читают, изменяют и записывают одно значение, возможна потеря данных. Для таких сценариев необходимо использовать внешнюю базу данных с поддержкой транзакций или механизмов блокировок, либо проектировать workflow так, чтобы исключить параллельную запись в один ключ.
Поддерживает ли Data Store вложенные структуры ключей?
Нет, структура хранилища плоская (flat). Ключ — это строка. Однако в качестве значения можно сохранять сложные вложенные объекты JSON, что позволяет эмулировать структуры внутри значения.
Добавить комментарий