NoSQL #
1. NoSQL типы БД #
| Тип | Пример | Особенности | Когда использовать |
|---|---|---|---|
| Документные | MongoDB | JSON-документы, гибкая структура | Динамические, неструктурированные данные |
| Ключ-значение | Redis, DynamoDB | Максимально быстрый доступ | Кэш, данные с уникальными ключами |
| Колоночные (wide-column) | Cassandra | Хранение колонок внутри других колонок, объединение в групппы | Аналитика, обработка больших данных |
| Поисковые | Elasticsearch | Обратный индекс, по факту документная бд | Полнотекстовый поиск, поиск по логам |
| Графовые | Neo4j | Узлы и связи | Моделирование сложных связей между данными |
2. Для чего используется Redis? #
Redis - это высокопроизводительная NoSQL база данных, которая работает в оперативной памяти (in-memory), обеспечивая минимальные задержки. Основное назначение Redis - хранение данных в виде ключ-значение
3. Что такое Кэш? #
Кэш - это временное хранилище данных, созданное для ускорения повторного доступа к ним
Преимущества
- Ускорение - данные быстрее извлекаются из кэша, чем из основного хранилища
- Экономия ресурсов - уменьшение нагрузки на сервер базы данных
- Снижение задержек - быстрый доступ к часто используемым данным
Пример Кэширование результата SQL-запроса:
- пользователь делает запрос к базе данных
- результат сохраняется в Redis
- повторный запрос возвращает данные из кэша Redis
Подходы к настройке инвалидации кэша Инвалидация кэша необходима для обеспечения актуальности данных в кэше. Существует несколько основных подходов:
1. Time-to-Live (TTL) Устанавливается время жизни данных в кэше. После истечения этого времени данные удаляются автоматически
Преимущества:
- Простота настройки, минимальная нагрузка на систему Недостатки:
- Возможна работа с устаревшими данными до истечения TTL
Установка времени жизни 60 секунд:
redis.set(key, value, 60);
2. Manual Invalidation Инвалидация данных выполняется вручную, например, при обновлении данных в основной базе данных
Преимущества
- Полный контроль над процессом Недостатки
- Возможен человеческий фактор - забыть удалить данные из кэша
Удаление ключа после изменения записи в базе:
redis.del("user:123");
3. Инвалидация по событию Данные инвалидируют при наступлении некоего события - обычно это обновление данных в источнике (write through и write aside стратегии кэширования). Также в качестве события для инвалидации данных может выступать время последней модификации данных