fix(docs): расхождение нод при обновлении словаря названо верно

Зачем: горячее ревью поймало ошибку в трёх местах сразу. Было записано, что
после правки каталога ноды расходятся до тридцати секунд — число взято из
ширины окна LIFETIME(MIN 60 MAX 90). Ширина тут ни при чём: каждая нода ждёт
правки от нуля до верхней границы окна, фазы у них независимы, поэтому
расходиться они могут почти на все полторы минуты.

Что: исправлены ADR 0012, опорная точка мастер-спеки и комментарий DDL. Заодно
уточнено, что LIFETIME(0) неатомарность не предотвращал, а сжимал до разброса
исполнения SYSTEM RELOAD DICTIONARY ON CLUSTER, и что витрина выручки пока
спроектирована, а не построена.

Проверка: рассуждением, замером не подтверждалось — прежнее число тоже было
выведено, а не измерено. Замер в ADR (116 секунд на окне MIN 60 MAX 120)
относится к другому утверждению: что словарь обновляется сам.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 11:47:23 +03:00
co-authored by Claude Opus 5
parent b3e66034fc
commit d77acfdf6c
3 changed files with 20 additions and 14 deletions
+12 -9
View File
@@ -26,7 +26,7 @@
## Почему зона, а не прописка в слое
**Справочник читают несколько слоёв, а производит его ни один.** Каталог нужен
**Справочник читают несколько слоёв, а не производит ни один.** Каталог нужен
модели заказов в DDS и витрине выручки в DM; будущие регионы — представлению
событий в DDS; `analyst` читает его напрямую. Писателя нет вовсе: содержимое
приходит из файла репозитория. Прописка внутри `dds` приписывала слою модели
@@ -82,7 +82,7 @@ DM объекта, лежащего в DDS, — течение вниз, ров
**Историзацию и представление «последняя загрузка» из образца не берём.** В
промышленном примере таблица копит загрузки с меткой времени, а представление
берёт последнюю: источник приезжал извне, и версий у него не было нигде. У нас
версии есть — **история каталога это git**. Дублировать её в ClickHouse значит
версии есть — **история каталога это и есть git**. Дублировать её в ClickHouse значит
поставить конструкцию, у которой на стенде нет причины, а расшифровывать её
менти всё равно придётся.
@@ -137,17 +137,20 @@ DM объекта, лежащего в DDS, — течение вниз, ров
- **Обновление словаря на кластере не атомарно, и это заявленное свойство.**
Случайный момент внутри окна разводит опросы разных серверов, чтобы они не
ходили к источнику разом. Побочный эффект — ноды перезагружают словарь в
разное время, и на нашей паре расхождение доходит до 30 секунд: правка
каталога полминуты видна одной ноде и не видна другой. Прежнее решение
`LIFETIME(0)` эту неатомарность предотвращало; теперь она предъявлена
намеренно. Урок записан опорной точкой в мастер-спеке, тащить его в курс —
разное время. Ждать правки каталога каждой из них приходится от нуля до
верхней границы окна, а фазы у них независимы, поэтому расходиться они могут
почти на все полторы минуты: одна перезагрузилась сразу после правки, вторая
ещё нет. Прежнее решение `LIFETIME(0)` окно не закрывало, а сжимало до
разброса исполнения `SYSTEM RELOAD DICTIONARY ON CLUSTER`; теперь оно
раскрыто намеренно. Урок записан опорной точкой в мастер-спеке, тащить его в курс —
отдельное решение.
- **Номенклатура товаров — медленно изменяющийся справочник**, и в предметной
области это так. Стенд упрощает: файл в репозитории под версией git.
Историзации в хранилище нет, и обещать её этот документ не должен.
- Витрина выручки представление, поэтому категория подставляется в момент
запроса, и правка каталога меняет отчёт задним числом. Материализуй мы
категорию при приёме — не изменила бы.
- Витрина выручки спроектирована представлением, поэтому категория будет
подставляться в момент запроса, и правка каталога изменит отчёт задним
числом. Материализуй мы категорию при приёме — не изменила бы. Самой витрины
ещё нет, она приходит этапом 4.
## Что проверено