System Design Space
Граф знанийНастройки

Обновлено: 24 июня 2026 г. в 15:37

Введение в хранение данных

лёгкий

Введение в хранение состояния, внешние хранилища для приложений без сохранения состояния, гарантии консистентности, API-контракты, интеграцию и эволюцию от транзакционной обработки OLTP к NoSQL, классу NewSQL СУБД и гибридной транзакционно-аналитической обработке.

Эта глава показывает эволюцию хранения без магии: от файлов и простой транзакционной обработки OLTP к NoSQL, классу NewSQL СУБД и гибридной транзакционно-аналитической обработке команды обычно приходят не из моды, а из накопившихся ограничений.

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

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

Практическая польза главы

Модель состояния

Явно описывайте, где живёт состояние: в приложении, очереди, базе данных или объектном хранилище, и какие гарантии нужны на каждом шаге.

API и данные

Проектируйте контракты API с учётом моделей хранения: идемпотентности, повторов, порядка событий и дедупликации.

Класс NewSQL СУБД и гибридная аналитика

Понимайте, когда класс NewSQL СУБД и гибридная транзакционно-аналитическая обработка упрощают архитектуру, а когда лучше разнести транзакционный и аналитический контуры.

Структура на интервью

Уверенно объясняйте путь эволюции данных от простого хранения к распределённой архитектуре без лишней сложности.

Рамка выбора и редакторский фокус

Фокус главы

эволюции хранения состояния, API-контрактах и выборе внешнего хранилища

Профиль нагрузки

Начинайте с профиля данных: что является источником истины, где нужна транзакционная обработка OLTP, где аналитика, поиск, кэш или поток событий.

Когда выбирать

Глава нужна как входная рамка: она помогает выбрать порядок изучения и не прыгать сразу к любимой СУБД.

Граница и риск

Главный риск — смешать классификацию, выбор технологии и эксплуатационные гарантии в одну неявную рекомендацию.

Связать дальше

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

Источник

Essential Architecture - Data

Расшифровка лекции от 4 октября 2021 года о хранении данных и влиянии выбора хранилища на API.

Перейти на сайт

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

Дальше мы идём от файлов и классической к NoSQL, , , , и . Сквозная мысль одна: вынести состояние за пределы процесса — только половина работы. Дальше придётся честно ответить, где это состояние живёт и какие гарантии из-за этого может дать интерфейс прикладного программирования (API).

Почему данные определяют API

Связанная тема

The Twelve-Factor App

Подход без сохранения состояния как фундамент масштабирования и устойчивости.

Читать обзор

Решение по хранению данных не остаётся под капотом — оно проявляется в интерфейсе как набор вполне измеримых свойств:

  • Задержка ответа и пропускная способность
  • Границы строгой и конечной консистентности
  • Модель ошибок, повторов и дедупликации
  • Ограничения на фильтрацию/поиск/пагинацию
  • Идемпотентность для повторяемых операций
  • Ответственность команд за данные и контракты

Без состояния как фундамент

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

Связанная тема: The Twelve-Factor App.

Эволюция хранения состояния

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

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

Реляционные базы данных для транзакционной обработки (OLTP)

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

Аналитическая обработка (OLAP)

Кубы и схемы «звезда» и «снежинка» нужны там, где операционная база уже не тянет тяжёлые агрегаты для бизнес-аналитики (BI).

Big Data / Hadoop

Когда данные перестают помещаться на одну машину, массовую пакетную обработку берут на себя MapReduce и экосистема Hadoop.

Объектное хранилище

Объекты вместо жёсткой иерархии каталогов, а интерфейс S3 стал стандартом де-факто — это дёшево и почти безгранично, но без транзакций и сильной консистентности.

NoSQL

Горизонтальное масштабирование, за которое платят явными компромиссами по консистентности и возможностям запросов.

NewSQL

SQL и -гарантии в распределённой архитектуре для транзакционной нагрузки.

HTAP

Сближение и : аналитика почти в реальном времени рядом с операционными данными.

Класс NewSQL СУБД и гибридная транзакционно-аналитическая обработка HTAP

Когда нужен

Подходит, когда нужны модель языка запросов SQL, строгие транзакции и горизонтальный рост без ручного управления шардами.

Когда нужен

Оправдан там, где продукту нужны и оперативные транзакции, и аналитика почти в реальном времени на тех же данных.

Ключевые риски

Рост операционной сложности, дорогие межрегиональные запросы и ограничения для тяжёлой аналитики.

Как это защищать на интервью

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

Практический ориентир: подходит для ядра с сохранением состояния и высокой транзакционной ценой ошибки, а — для продуктовых сценариев, где аналитика должна идти почти синхронно с операционным контуром.

Реляционные базы данных: ключевые понятия

Связанная тема

Database Internals

B-дерево (B-Tree), LSM и транзакции внутри СУБД.

Читать обзор

Нормализация

Форма данных задаёт схему и поведение запросов — переусердствуете, и каждый запрос превратится в каскад соединений.

SQL

Декларативный язык запросов SQL отделяет «что» от «как» и оставляет план выполнения на откуп движку.

Индексы

Ускоряют чтение, но каждый из них — это лишняя работа на записи и обновлении.

Транзакции и модель ACID

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

Репликация

Даёт переключение на резерв и масштабирование чтений, но за это вы расплачиваетесь отставанием реплик и компромиссами по консистентности.

Шардирование

Распределяет нагрузку по ключу шарда — и сразу усложняет запросы, которые задевают сразу несколько шардов.

Интеграция между системами

Связанная тема

Enterprise Integration Patterns

Файлы, удалённые вызовы процедур (RPC) и обмен сообщениями как паттерны интеграции.

Читать обзор

Обмен файлами

Понятный и дешёвый способ обмена, но инкапсуляция слабая: формат файла фактически становится контрактом.

Общая база данных

Общая схема намертво связывает команды и тормозит развитие — изменить таблицу нельзя, не задев соседей.

RPC

Удалённый вызов процедур (RPC) даёт сильные контракты, но платить за это приходится дисциплиной версионирования.

Обмен сообщениями

Подходит для асинхронных сценариев и гибких интеграций — ценой того, что порядок и доставку приходится продумывать явно.

Общая база данных создаёт сильную связанность и тихо ломает контракты между командами: любая правка схемы становится общей проблемой. Поэтому ответственность за данные разводят по владельцам, а интеграцию выносят в явные интерфейсы.

Озеро данных (Data Lake) и подход Data Mesh

Связанная тема

Big Data

Эволюция аналитики и архитектурные слои.

Читать обзор

Data Lake

Централизованный сбор данных из систем через процессы . По мере роста узким местом становится не объём, а связанность и качество: одна центральная команда перестаёт успевать за всеми доменами.

Data Mesh

  • Доменно-ориентированная децентрализация
  • Данные как продукт
  • Платформа самообслуживания
  • Федеративное управление через исполняемые политики

DDD и границы доменов

Связанная тема

Learning Domain-Driven Design

Ограниченные контексты и доменные контракты.

Читать обзор

Когда между ограниченными контекстами проведены доменные границы и контракты, интерфейс прикладного программирования (API) переживает внутренние перестройки без поломок у соседей. Проблемно-ориентированное проектирование (DDD) как раз помогает развести модели данных разных команд.

Связанная тема: Learning Domain-Driven Design.

Как данные превращаются в удобный API

Мостик данные -> API

  • Предсказуемые гарантии модели ACID и модели BASE
  • Ясные источники истины
  • Чёткая модель ошибок и повторов
  • Границы доменов и контрактов
  • Идемпотентность и дедупликация
  • Изоляция от общей базы данных

NoSQL через призму теоремы CAP и модели BASE

Понимание теоремы и модели подсказывает, где честно обещать клиенту лишь консистентность в конечном итоге, а где повтор без идемпотентности приведёт к дублю.

Связанная тема: CAP теорема.

Мини-чек-лист удобного API

  • Понятно, какие гарантии консистентности даёт система.
  • Клиент понимает, где возможна консистентность в конечном итоге.
  • Идемпотентность для операций, которые могут быть повторены.
  • Ошибки, ретраи и таймауты описаны детерминированно.
  • Нет общей базы данных как скрытого канала интеграции.
  • Доменные границы отражены в контракте API.

Практические сценарии выбора хранилища

Журнал проводок и биллинг

Реляционная БД или

Сильная консистентность, строгие транзакции, корректная обработка повторов и аудита.

Оперативная отчётность продукта

или + потоковая обработка +

Нужны быстрые дашборды без долгого лага и без потери транзакционной части.

Телеметрия и мониторинг

+ объектное хранилище

Высокая скорость приёма, правила удержания данных и дешёвое долгосрочное хранение исторических метрик.

Контент + поиск + рекомендации

Несколько типов хранилищ

Одна БД редко оптимальна для транзакций, полнотекстового поиска и векторного извлечения контекста одновременно.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки