From 28d974e45d3171b020d2ecca4c5b3a86d80a2a11 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sun, 2 Aug 2026 19:27:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B1=D0=B5=D0=BA=D0=BB=D0=BE=D0=B3:=20=D1=86?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=87=D0=B8=D1=82=D0=B0=D1=8E=D1=89=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83=D1=82=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B0=20=D1=87=D0=B5=D0=BA?= =?UTF-8?q?=D0=BF=D0=BE=D0=B9=D0=BD=D1=82=D0=BE=D0=BC=20=D0=B8=20ETag,=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20=D0=B2=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=91=D1=82=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20Read=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/backlog/README.md | 2 +- docs/backlog/cena-chitayushchego-marshruta.md | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/backlog/README.md b/docs/backlog/README.md index c55aa7d..407eebf 100644 --- a/docs/backlog/README.md +++ b/docs/backlog/README.md @@ -19,9 +19,9 @@ ## блокеры - [Тай-брейк при равной полноте точек](taj-brejk-pri-ravnoj-polnote.md) — Сегодняшний порядок канонических форм берёт меньшее значение в 96% случаев — для накопительных это систематический недосчёт -- [Цена первого читающего маршрута: память, WAL и повторный опрос](cena-chitayushchego-marshruta.md) — Один запрос каталога способен выесть память процесса и раздуть WAL — а OOM здесь стоит доставок, которых телефон не перешлёт ## высокий +- [Цена первого читающего маршрута: память, WAL и повторный опрос](cena-chitayushchego-marshruta.md) — Решено: чекпойнт по таймеру плюс ETag по data_version. Берётся перед Read API — тот строится поверх этой машинерии - [Read API: точки, выбор слоя, свёртка по сетке](read-api-tochki.md) — Данные видны только через sqlite на хосте — ни один из трёх потребителей ничего прочитать не может - [OpenAPI-спека и Swagger UI](openapi-swagger.md) — Потребителей три и один из них агент — контракт должен читаться машиной, а не пересказываться в чате - [MCP-сервер поверх Read API](mcp-server.md) — Агент-медик — первый заказчик проекта, а подключить его сейчас нечем diff --git a/docs/backlog/cena-chitayushchego-marshruta.md b/docs/backlog/cena-chitayushchego-marshruta.md index 9bc1ae7..354b7f6 100644 --- a/docs/backlog/cena-chitayushchego-marshruta.md +++ b/docs/backlog/cena-chitayushchego-marshruta.md @@ -1,6 +1,21 @@ # Цена первого читающего маршрута: память, WAL и повторный опрос -**Приоритет:** блокеры +**Приоритет:** высокий + +**Решение принято 2026-08-02: вариант (г) плюс (в), именно в таком порядке.** +Разбирается без владельца: контракт хранения не меняется, данные не трогаются, +а обе части — общепринятая практика, а не собственный дизайн. Чекпойнт по +таймеру закрывает единственное проявление, которое ломает приём (диск), и стоит +одной горутины; `ETag` по `PRAGMA data_version` — один запрос к базе, снимает и +повтор, и большую часть читающих транзакций, не заводя кеша ответа. + +Вариант (а) — предел и дедлайн маршрута — **не отвергнут, а отложен** до +[Read API точек](read-api-tochki.md): там предел размера ответа всё равно +проектируется, и делать его дважды не нужно. Вариант (б) не берём, пока +счётчик не заговорит. Вариант (д) — последним, если (в) окажется мало. + +Задача берётся **перед** Read API: тот строится поверх этой машинерии. +Ниже — исходная постановка блокера, она же ТЗ. ## Что решить