Какие типы хранилищ данных вы знаете?

«Какие типы хранилищ данных вы знаете?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В архитектуре приложений выбор хранилища зависит от требований к данным: структура, объем, скорость доступа и согласованность. Основные типы:

1. Файловые системы

  • Для чего: Хранение неструктурированных или слабоструктурированных данных (логи, медиафайлы, конфиги).
  • Примеры: Локальные диски, сетевые файловые системы (NFS), объектные хранилища (Amazon S3, MinIO).
  • Почему: Простота, низкая стоимость для больших объемов, но слабая структура и сложность поиска.

2. Реляционные базы данных (SQL)

  • Для чего: Структурированные данные с четкими связями, где критична целостность и поддержка сложных транзакций (ACID).
  • Примеры: PostgreSQL, MySQL, Microsoft SQL Server.
  • Почему: Гарантируют согласованность, мощный язык запросов (SQL), но могут масштабироваться сложнее.

3. NoSQL базы данных

  • Документные (MongoDB, Couchbase): Для гибких, иерархических данных (JSON-документы).
  • Ключ-значение (Redis, DynamoDB): Для кэширования, сессий, простых записей с сверхбыстрым доступом.
  • Колоночные (Cassandra, ClickHouse): Для аналитики и временных рядов, где важна агрегация по столбцам.
  • Графовые (Neo4j): Для данных со сложными связями (соцсети, рекомендации).

4. In-memory хранилища и кэши

  • Для чего: Ускорение доступа к «горячим» данным, сессии, счетчики.
  • Примеры: Redis (с персистентностью), Memcached.
  • Почему: Максимальная скорость (данные в оперативной памяти), но ограниченный объем и стоимость.

5. Поисковые движки

  • Для чего: Полнотекстовый поиск, агрегация и анализ логов.
  • Примеры: Elasticsearch, OpenSearch.
  • Почему: Инвертированные индексы для быстрого поиска по тексту, но не заменяют основную БД для транзакций.

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

  • Скорость записи/чтения: In-memory > NoSQL > SQL.
  • Гибкость схемы: Документные БД > SQL.
  • Согласованность: SQL (сильная) > NoSQL (часто eventual consistency).
  • Масштабируемость: NoSQL (горизонтальная) часто проще, чем у SQL.