Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
114 of 182 menu
Бесплатный курс: Практика на Реальных Проектах и Работы в Портфолио! Начало 11 ноября. Жми для записи!

Таблица key_value

Таблица key_value является универсальным хранилищем для данных в формате ключ-значение. В отличие от таблицы variable, которая хранит глобальные настройки, key_value используется для данных, специфичных для определенной коллекции или компонента. Данные хранятся в сериализованном виде, что позволяет сохранять сложные структуры (массивы, объекты).

Поля

Поле Тип данных Описание
collection varchar(128) Название коллекции, к которой принадлежит запись. Коллекции группируют связанные данные (например, system.cron, state, migrate). Первичный ключ, часть 1.
name varchar(128) Уникальный ключ (идентификатор) записи в пределах своей коллекции. Первичный ключ, часть 2.
value blob Значение, связанное с ключом. Данные хранятся в сериализованном виде (чаще всего PHP-сериализация или JSON).

Как это работает

Система Drupal использует сервис keyvalue для работы с этой таблицей. Различные модули создают свои собственные "коллекции" для логического разделения данных. Например, система миграций (Migrate API) использует коллекцию migrate для хранения состояний миграции, а системная коллекция state предназначена для хранения временных состояний, которые не являются настройками и могут часто меняться.

При записи данных значение (value) автоматически сериализуется. При чтении - десериализуется. Это позволяет разработчикам сохранять в таблицу не только строки, но и числа, массивы, объекты (реализующие интерфейс Serializable).

Важным аспектом является то, что таблица не предназначена для хранения больших объемов данных или частых сложных запросов. Её основное назначение - быстрый доступ к небольшим порциям данных по их уникальному ключу в рамках коллекции.

Пример SQL-запроса

Получить все записи из коллекции state можно следующим запросом:

SELECT collection, name, value FROM key_value WHERE collection = 'state';

Для получения конкретного значения по ключу, например, времени последнего запуска cron:

SELECT value FROM key_value WHERE collection = 'state' AND name = 'system.cron_last';

Смотрите также

  • таблицу key_value_expire,
    которая хранит значения с истекающим сроком действия
  • таблицу cache_default,
    которая является кешем данных по умолчанию
  • таблицу variable,
    которая хранит глобальные переменные и настройки системы
  • таблицу semaphore,
    которая управляет блокировками для одновременного доступа