Раздел описывает способы представления, хранения, изменения, передачи, поиска и восстановления данных в программных системах.
Материалы раздела рассматривают общие модели данных, внутреннее устройство хранилищ, гарантии сохранности и согласованности, обработку запросов, масштабирование и эксплуатацию различных систем хранения.
Основные направления
- Моделирование и представление данных — сущности, связи, ограничения, идентификаторы, логические модели, схемы и форматы сериализации.
- Реляционные данные и SQL — таблицы, ключи, ограничения, реляционная алгебра, запросы, нормализация и управление схемой.
- Транзакции и конкурентный доступ — ACID, уровни изоляции, блокировки, MVCC, взаимные блокировки и гарантии изменения данных.
- Физическое хранение и выполнение запросов — страницы, журналы изменений, индексы, статистика, планы выполнения и оптимизация запросов.
- Нереляционные и специализированные хранилища — key-value, документные, колоночные, графовые, временные, поисковые, объектные, файловые и блочные системы.
- Кеширование, очереди и потоки данных — стратегии кеша, инвалидация, брокеры сообщений, журналы событий и обработка непрерывных потоков.
- Распределение и масштабирование данных — репликация, partitioning, sharding, согласованность, высокая доступность и масштабирование чтения и записи.
- Жизненный цикл и защита данных — миграции, резервное копирование, восстановление, архивирование, retention, удаление, шифрование и управление доступом.
- Эксплуатация хранилищ — соединения, наблюдаемость, диагностика производительности, планирование ёмкости, стоимость и восстановительные испытания.
Типы систем хранения
- Реляционные СУБД — системы с табличной моделью, SQL и транзакционными гарантиями.
- Нереляционные базы данных — key-value, документные, колоночные, графовые и временные хранилища.
- Поисковые системы — движки полнотекстового поиска, агрегаций и анализа документов.
- Объектные, файловые и блочные хранилища — системы для хранения файлов, объектов и виртуальных устройств.
- Очереди и потоковые платформы — системы передачи, временного хранения и обработки сообщений и событий.
Основные вопросы раздела
Материалы раздела должны помогать отвечать на следующие вопросы:
- Как выбрать модель данных и тип хранилища для конкретной задачи?
- Чем логическая модель отличается от физического размещения данных?
- Когда следует нормализовать или денормализовать данные?
- Какие гарантии предоставляют транзакции и уровни изоляции?
- Как индексы и планы выполнения влияют на стоимость запросов?
- Когда использовать реляционное, документное, key-value, графовое или поисковое хранилище?
- Как выбрать стратегию кеширования и избежать устаревших данных?
- Как репликация и sharding влияют на согласованность и доступность?
- Как безопасно изменить схему или перенести данные между системами?
- Какие резервные копии необходимы для достижения требуемых RPO и RTO?
- Как обнаружить медленные запросы, блокировки и нехватку ёмкости?
- Как оценить стоимость хранения, репликации и обработки растущего объёма данных?
Границы раздела
Раздел посвящён моделям данных, устройству хранилищ и гарантиям работы с информацией.
Абстрактные структуры данных и алгоритмы рассматриваются в разделе алгоритмов и структур данных. Файловые системы конкретной операционной системы относятся к разделу операционных систем. Предметное моделирование программных компонентов рассматривается в разделе проектирования программного обеспечения. Распределённая согласованность и устойчивость к частичным отказам дополнительно рассматриваются в разделе распределённых систем и надёжности.