Таблица 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,
которая управляет блокировками для одновременного доступа