materials/ddia-2ed
📄 Карта переноса: DDIA 2-е изд. → база знаний
⚠️ 2-е издание ≠ русское издание. Русский перевод «Высоконагруженные приложения», Питер — это 1-е издание 12 глав, старая нумерация: репликация = гл. 5, консенс
📄 Глава 1. Компромиссы в архитектуре систем данных (Trade-Offs in Data Systems Architecture)
1. Центральный тезис всей книги: «решений нет — есть trade-offs»; data-intensive-приложения собираются из строительных блоков БД, кэш, поисковый индекс, потоков
📄 Глава 2. Определение нефункциональных требований (кейс: домашние ленты) (Defining Nonfunctional Requirements)
1. НФТ надёжность, масштабируемость, поддерживаемость формулируются до архитектуры; весь учебный кейс главы — домашние ленты соцсети followers → timeline.
📄 Глава 3. Модели данных и языки запросов (Data Models and Query Languages)
1. Приложение — слои моделей объекты → JSON/реляционная/граф → байты движка; каждый слой скрывает сложность нижнего; модель данных определяет, какие запросы ест
📄 Глава 4. Хранение и извлечение (Storage and Retrieval)
1. Два семейства движков OLTP: log-structured LSM и page-oriented B-tree; простейший индекс — hash map в памяти поверх append-only лога нет range-запросов, hash
📄 Глава 5. Кодирование и эволюция (Encoding and Evolution)
1. При поэтапных релизах обязательны backward compatibility новый код читает старые данные и forward compatibility старый код читает новые данные.
📄 Глава 6. Репликация (Replication)
1. Три топологии: single-leader дефолт, multi-leader мульти-ДЦ и офлайн-клиенты; сам Клеппман — «dangerous territory» из-за конфликтов, leaderless Dynamo: писат
📄 Глава 7. Шардирование (Partitioning / Sharding)
1. Зачем: данные/нагрузка не влезают в одну ноду; плата — кросс-шард запросы, транзакции и ребалансировка; шард-ключ — решение №1, менять потом = переливать всё
📄 Глава 8. Транзакции (Transactions)
1. Транзакция группирует операции с гарантиями ACITY-словарь расплывчат; сильнее всего варьируется «I»; в распределённых системах гарантии дорогие — поэтому их
📄 Глава 9. Проблемы распределённых систем (The Trouble with Distributed Systems)
1. Partial failure — часть системы сломана недетерминированно, «работает или нет» больше нет; единственный путь — проектировать с паранойей chaos-тесты, искусст
📄 Глава 10. Консистентность и консенсус (Consistency and Consensus)
1. Две философии: eventual consistency репликация видна приложению, разработчик разруливает конфликты vs strong consistency система выглядит как одна нода; прощ
📄 Глава 11. Пакетная обработка (Batch Processing)
1. Online запрос-ответ, латентность vs offline/batch bounded вход → derived output с нуля, детерминированность позволяет перезапускать; Unix-философия «маленьки
📄 Глава 12. Потоковая обработка (Stream Processing)
1. Данные unbounded; batch искусственно режет на окна; поток = «таблица + изменения во времени», отсюда event sourcing/CDC.
📄 Глава 13. Философия потоковых систем (A Philosophy of Streaming Systems)
1. Data integration: комбинировать специализированные системы, дергая всё из одного журнала событий index, кэш, DWH — проекции одного лога; end-to-end аргумент
📄 Глава 14. Делать правильные вещи (этика) (Doing the Right Thing)
1. Данные — о людях: privacy, consent, минимизация сбора и retention; человеческое достоинство как ограничение дизайна.