Хранение данных

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

Данные переживают отдельный запрос

Приложение может быть stateless, но сама система почти всегда хранит состояние: пользователей, заказы, события, файлы, настройки и другие данные. Поэтому выбор хранилища — это не вопрос «какая база быстрее», а решение о том, какие свойства данных и нагрузки должна поддерживать система.

В этом разделе разберём основные типы хранилищ и научимся выбирать их от требований, а не от популярности технологии.

Что разберём

  • Требования к хранилищу. Определим объём данных, характер чтений и записей, требования к задержке, доступности, согласованности и сроку хранения.
  • SQL vs NoSQL. Разберём, какие задачи естественно решаются реляционной моделью, а когда полезнее выбрать другую модель данных.
  • Реляционные базы данных. Посмотрим на таблицы, связи, ограничения и транзакции как на инструменты поддержания структурированных данных.
  • Key-Value хранилища. Увидим модель «ключ → значение» и сценарии, где простой доступ по ключу важнее сложных запросов.
  • Документные базы данных. Разберём хранение агрегированных объектов в виде документов и гибкую структуру записей.
  • Колоночные базы данных. Посмотрим, почему хранение по столбцам удобно для аналитики и чтения небольшого набора полей из большого объёма данных.
  • Object Storage. Поймём, где хранить крупные бинарные объекты — изображения, видео, архивы и резервные копии.
  • Выбор хранилища. Соберём требования и ограничения вместе и научимся выбирать подходящий тип хранилища для конкретной части системы.

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

Универсальной базы данных нет. Хорошее хранилище — то, чьи свойства совпадают с требованиями конкретных данных и операций.