Работали ли вы с NoSQL базами данных?

«Работали ли вы с NoSQL базами данных?» — вопрос из категории Базы данных, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал с различными типами NoSQL СУБД, каждая для своих сценариев.

1. Документные (MongoDB): Использовал для хранения JSON-документов с динамической схемой, например, профилей пользователей или контента каталога.

-- Пример агрегации в MongoDB (аналог GROUP BY + HAVING)
db.orders.aggregate([
  { $match: { status: "completed" } },
  { $group: { _id: "$customerId", totalSpent: { $sum: "$amount" } } },
  { $match: { totalSpent: { $gt: 1000 } } }
])

Плюсы: Гибкость, вложенные структуры. Минусы: Сложные транзакции (появились в 4.0), производительность JOIN через $lookup.

2. Колоночные (Cassandra): Применял для временных рядов и событийных данных, где важна высокая скорость записи и горизонтальное масштабирование.

  • Ключевая концепция: Модель данных строится вокруг запросов (Query-Driven Design). Первичный ключ = Partition Key + Clustering Key.
  • Почему не SQL? Отсутствие JOIN и сложных агрегаций компенсируется предрасчитанными материализованными представлениями (Materialized Views).

3. Ключ-значение (Redis): Для кэширования сессий, результатов тяжелых запросов и очередей (через списки/публикации).

Критерии выбора:

  • Схема данных: Жесткая (SQL) vs. гибкая/отсутствует (NoSQL).
  • Масштабирование: Вертикальное (SQL) vs. горизонтальное (NoSQL).
  • Шаблон доступа: Чтение/запись по ключу, агрегации, сложные связи.
  • Консистентность: Требуется строгая ACID или достаточно eventual consistency (CAP-теорема).