Key-Value хранилища

Базовый System Design
≈ 2 мин чтения

Ключ сразу указывает на значение

Key-Value Store хранит пары «ключ → значение». Приложение знает ключ и по нему читает, записывает или удаляет значение. Модель проста, поэтому такой доступ можно сделать очень быстрым и хорошо распределяемым.

session:9f21 -> { userId: 42, expiresAt: ... }
feature:user:42 -> { darkMode: true }

Само хранилище обычно не обязано понимать внутреннюю структуру значения так же глубоко, как реляционная база понимает колонки и связи между таблицами.

Сильная сторона — известный путь доступа

Key-value модель особенно удобна, когда почти каждый запрос имеет вид «дай значение по этому ключу». Это могут быть сессии, настройки, счётчики, временное состояние или быстрые lookup-данные.

Если приложению постоянно нужны фильтры по нескольким полям, joins и произвольные аналитические запросы, одного доступа по ключу становится недостаточно.

Ключ — часть архитектуры

Формат ключа влияет на распределение данных и удобство доступа. Он должен быть стабильным, однозначным и соответствовать тому, как приложение действительно читает данные.

Например, если профиль всегда читается по userId, естественным ключом будет именно идентификатор пользователя. Если нужный lookup идёт по другому признаку, может потребоваться отдельная структура или вторичный индекс, если хранилище его поддерживает.

TTL удобен для временных данных

Многие key-value системы позволяют задать срок жизни записи. После истечения TTL значение автоматически становится недоступным и удаляется по правилам конкретного продукта.

SET session:9f21 value TTL=30m

Это естественно для сессий, одноразовых токенов и других данных, которые не должны жить бесконечно.

Простая модель доступа — одновременно преимущество и ограничение. Key-value хранилище отлично работает, когда ключ заранее известен, но не стоит ожидать от него возможностей реляционного query engine.