- Зачем:
- горячее ревью после написания: неточности формулировок и один пропуск
в списке читаемых колонок.
- Что:
- уточнено, что дом набора выбран развилкой #130, а не «первой развилкой
карты» (первыми шли research-тикеты);
- сверке добавлен order_date в перечень читаемых колонок (спека, §7:
колонка order_day);
- мастер-спека слинкована при первом упоминании; пояснена роль резолюции
#128 в «Связанных решениях».
- Проверка:
- только документы; ссылки сверены с деревом docs/.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
4.2 KiB
Markdown
60 lines
4.2 KiB
Markdown
# Слой DDS: бизнес-модель хранилища
|
||
|
||
Устройство детального слоя: сущности, которыми хранилище говорит с
|
||
витринами, их связи и правила слоя. Набор собирается развилками карты #127
|
||
(этап 4) и правится по мере постройки.
|
||
|
||
Рамки заданы мастер-спекой [«Боевой реализм стенда
|
||
(v2)»](../../specs/2026-07-30-stand-v2-realism.md): карта таблиц и витрины —
|
||
раздел 7, сверка — раздел 4, склейка идентичностей — раздел 5. Дом выбран
|
||
развилкой #130 — первой, которой понадобилось записать резолюцию в доки:
|
||
записи этапа 4 живут здесь, по хранилищную сторону границы
|
||
«источник | хранилище». Устройство источников остаётся их
|
||
собственным наборам ([заказы бэкенда](../orders/README.md)) — генератор
|
||
переносим и о нашем DDS не знает.
|
||
|
||
## Карта модели
|
||
|
||
Целостность модели — связи и ко-локация — живёт в этом разделе; файлы
|
||
сущностей держат глубину и на карту ссылаются.
|
||
|
||
- **Заказ** (`dds.order`) — физическая сущность: одна строка — заказ в
|
||
текущем состоянии, позиции массивами в строке, наполняется заменой
|
||
партиций — [модель заказа](order.md).
|
||
- **Сессия** (`dds.session`) — зерно и правила сборки решает развилка #131.
|
||
- **Событие** (`dds.event_v`) — контракт над ODS, а не копия: язык
|
||
бизнес-модели событию даёт развилка #132.
|
||
- **Карта идентичностей** (`dds.identity_map`) — кука ↔ пользователь
|
||
магазина; сборку решает развилка #133.
|
||
|
||
Связи держатся двумя ключами моста (спека, разделы 4 и 5): `purchaseID[1]`
|
||
события равен `order_id` заказа — по нему идут сверка и сборка склейки;
|
||
`user_id` заказа связывает куки одного человека. Ко-локацию задаёт
|
||
шардирование: события и карта идентичностей раскладываются одним выражением
|
||
от куки, заказы — от `order_id`. Поэтому обогащение витрин склейкой
|
||
локально, а сверка и сборка карты ходят через GLOBAL JOIN с обеими
|
||
сторонами-подзапросами ([исследование
|
||
соединений](../../research/2026-08-22-distributed-join.md)).
|
||
|
||
## Правила слоя
|
||
|
||
- DDS обслуживает человека с дашбордом: время лежит в поясе счётчика,
|
||
пересчёт — один раз при наполнении слоя ([дока хранилища](../storage.md),
|
||
«Часовые пояса»).
|
||
- Служебные колонки — координаты собственной загрузки слоя; чужие ярлыки не
|
||
переносятся, а спрашиваются у их слоя по ключу сущности. Вывод правила и
|
||
цепочка расследования — [модель заказа](order.md).
|
||
|
||
## Открытые решения
|
||
|
||
- Сессии, контракт `dds.event_v`, сборка `dds.identity_map` — развилки
|
||
#131–#133 карты #127.
|
||
- Запуск трансформаций и механика замены партиций на кластере — #134 и
|
||
этап 5.
|
||
- Витрины DM — #135.
|
||
|
||
## Родословная
|
||
|
||
Дом набора и первая сущность собраны развилкой #130 карты #127; форма
|
||
набора — [ADR 0011](../../adr/0011-component-docs.md).
|