Опросник по архитектуре хранения

Квинтеты, обычные таблицы или комбинация

Механический опросник к меморандуму «Квинтеты против традиционных таблиц». Тринадцать вопросов о проекте — в ответ три оценки: сколько баллов набирает каждый способ хранения и сколько человеко-часов уйдёт на разработку такого решения.

Квинтеты — модель хранения самого Интеграма. Структура данных в ней описывается такими же записями, как сами данные, поэтому поля, справочники и связи добавляются без изменения схемы базы и без релиза. Опросник — проверка, а не реклама: он честно показывает вопросы, где квинтеты проигрывают обычным таблицам, и считает оба варианта по одной шкале.

Часы — на разработку, среднее для такого проекта. Сколько человеко-часов уйдёт, чтобы решение заработало: сама разработка, настройка под объём и нагрузку, отчётные механизмы, тиражирование и изменения структуры первого года. Сопровождение годами, железо и календарный срок сюда не входят — за сколько недель это сделают, зависит от числа исполнителей.

Считается только разница между подходами. Общая часть — сам сервер, интерфейсы, обучение пользователей, ведение самих данных — одинакова и в часы не входит. Ноль значит «здесь этот вариант базовый, лишней работы нет», а не «работы нет вообще».

Три варианта. Квинтеты — всё в одной квинтетной таблице, векторы в типизированной боковой таблице pgvector. РСУБД — обычные таблицы с колонками, DDL, программист или DBA. Комбинация — часть данных в обычных таблицах (гео с PostGIS, гигантская таблица, витрина для внешнего SQL), остальное в квинтетах.

Почему комбинация оценена ниже и стоит дороже. Она по определению означает две формы хранения, два набора правил и два пути сопровождения. В баллах она платит треть веса каждого вопроса; штраф снимается только там, где один из чистых вариантов вопрос категорически не тянет (набрал не больше трети веса) — тогда комбинация и есть ответ, и берёт полный балл сильного варианта. Потолок её шкалы — 90. В часах она по каждому вопросу берёт трудозатраты более подходящего хранилища, но добавляет разовую надбавку за стык двух контуров.

Правило нуля. Ответ, принёсший варианту 0 баллов, — блокер: вариант не подходит независимо от суммы и часов. Комбинация блокер не наследует, она уводит проблемные данные в подходящее хранилище. Баллы и часы — оценка составителя по числам меморандума, автором не подтверждена.

Откуда взяты часы
  • Пересчёт денег меморандума в часы по его же ставке senior-программиста 2 630 ₽/час (раздел 2.5): сущность с формами, правами и отчётами в кастоме — 125–175 тыс. ₽, то есть ≈55 часов; мелкая правка структуры — ≈10 часов; разбор «почему тормозит» — 4–8 часов.
  • Допущения составителя: заведение сущности в квинтетах — 4 часа аналитика, мелкая правка — 1 час; изменения структуры считаются за первый год работы; в диапазоне объёма берётся середина (10 млн и 300 млн записей); тиражирование считается на 20 экземпляров и на 200 арендаторов.
  • Сопровождение годами в часы не входит: опросник оценивает разработку, а не стоимость владения. Поэтому у отчётных механизмов стоит цена их сборки — накопитель в конструкторе против таблиц итогов, которые в обычной базе пишет программист.
  • Надбавка за комбинацию — 56 часов разово: общий справочник, перенос данных между контурами, сквозные права и отчёты поверх обоих хранилищ.
  • Перекос без своего SQL-специалиста: +80 часов к РСУБД — четыре захода к подрядчику по 20 часов вместе с постановкой, ожиданием, приёмкой и переделкой. Допущение составителя; сами 120 часов на разработку цепочки считаются отдельно и остаются у обоих подходов.
  • Железо в часы не переводится и в счёт не входит. Где оно значимо, число стоит в пояснении: дельта диска у квинтетов — 48 ₽/мес на миллион записей, 4 774 ₽/мес на 100 млн, 47 737 ₽/мес на миллиард (SSD 8,99 ₽/ГБ/мес, раздел 2.5).
  • Часы — порядок величины для разговора, а не смета. Ни одна из этих оценок не замерена.

Отметьте по одному ответу в каждом вопросе и сложите подписанные баллы и часы: с включённым JavaScript страница считает сумму и вердикт сама, без него опросник работает как бумажный бланк.

1. Сколько записей наберёт главная таблица проекта за 3–5 лет? вес 12

Сделки, документы, транзакции; справочники и статусы не считать. Часы — подготовка базы к такому объёму.

2. Как часто меняется структура данных? вес 12

Новые сущности, реквизиты, связи — после запуска. Часы — работа на эти изменения за первый год.

3. Кто будет менять структуру? вес 8

Часы — накладные на постановку задачи и приёмку сверх самой работы.

4. Сколько пользователей работают одновременно? вес 4

Часы — настройка сервера под такое число людей.

5. Насколько неровная нагрузка? вес 4

Часы — проектирование разгрузки.

6. Что делают с данными в отчётах? вес 12

Часы — сделать так, чтобы такие отчёты открывались быстро.

7. Насколько сложны сами запросы — нужны ли цепочки, вложенность, рекурсия? вес 8

Не про объём (это вопрос 6), а про устройство запроса: запрос как источник другого запроса, обход иерархии на произвольную глубину, сопоставление многие-ко-многим с вычислениями. Часы — сборка такой цепочки.

10. Нужен ли векторный поиск? вес 4

Похожие документы, семантический поиск, память ИИ-агента.

11. Нужны ли геоданные? вес 8

Оценка составителя: в ядре нет геотипа и геоиндекса, меморандум это не замерял.

12. Кто ещё читает данные напрямую, мимо платформы? вес 8

BI по SQL, dbt, ORM, интеграторы, аудиторы.

13. Сколько экземпляров системы предстоит развернуть? вес 8

Часы — работа на один экземпляр, умноженная на их число.

Таблица баллов и часов целиком

Отметьте по одному ответу в каждом вопросе, сложите баллы и сложите часы. Подсвеченная клетка — комбинация без штрафа в баллах: один из чистых вариантов вопрос не тянет. Часы — человеко-часы на разработку, «—» значит «так не делается». Наведите курсор на пояснение, чтобы увидеть замеры, из которых взята оценка.

№ВопросОтвет БаллыЧеловеко-часы на разработку Почему
Кв.РСУБДКомб. Кв.РСУБДКомб.
1Сколько записей наберёт главная таблица проекта за 3–5 лет?
вес 12
до 1 млн12128000Девять проектов из десяти сюда и попадают: ничего особенного делать не нужно ни там, ни там.
1–100 млн101288 ч00Объём заметный: у квинтетов данных на диске в 5–12 раз больше, под это настраивают бэкап и мониторинг.
100 млн – 1 млрд512860 ч8 ч8 чБольшая база. Квинтетам нужна разбивка таблицы на части и обходные решения там, где обычная база обходится настройкой.
больше 1 млрд01212200 ч24 ч24 чВыше всего, что на квинтетах проверено. Такой объём — отдельный проект по хранению.
2Как часто меняется структура данных?
вес 12
раз в год и реже412124 ч55 ч4 чОдно изменение: в конструкторе его делает аналитик за полдня, в обычной разработке это задача программиста — формы, права, выкладка.
несколько раз в год9857 ч85 ч7 чЧетыре изменения за год — одно крупное и три мелких. В конструкторе это часы, в обычной разработке недели.
ежемесячно и чаще, сущности появляются постоянно1231224 ч300 ч24 чСтруктура меняется постоянно, около двенадцати раз за год. Каждое изменение в обычной базе — миграция, релиз и окно обслуживания.
3Кто будет менять структуру?
вес 8
программист или DBA в штате либо на подряде485000Исполнитель есть, лишних согласований не возникает.
аналитик или владелец процесса, без программиста818020 ч0Каждое изменение придётся заказывать: объяснить, подождать, принять. В конструкторе владелец процесса меняет структуру сам.
4Сколько пользователей работают одновременно?
вес 4
до 50443000Обычная рабочая группа: десятки людей на паре ядер, настраивать нечего.
50–50034316 ч8 ч8 чКвинтетам нужно примерно вдвое больше памяти под ту же работу — сервер придётся настраивать вдумчивее.
больше 50024360 ч30 ч30 чВсе данные лежат в одной таблице: тяжёлое обслуживание задевает сразу всех, под это планируют окна.
5Насколько неровная нагрузка?
вес 4
ровная в течение дня443000
предсказуемые пики до ×10 (отчётный день, конец месяца)34316 ч20 ч16 чК отчётному дню данные готовят заранее: в конструкторе это настройка накопителя, в обычной базе — индексы и предрасчёт.
непредсказуемые пики ×10 и выше (акции, сезон, реклама)24360 ч40 ч40 чПики непредсказуемы: кроме предрасчёта нужен запас прочности и план обслуживания на случай, когда всё сойдётся разом.
6Что делают с данными в отчётах?
вес 12
карточки, списки, поиск; отчёты редкие12108000Готовить нечего: и там, и там это обычная работа с данными, а поиск у квинтетов даже быстрее.
регулярные отчёты за период, сальдо, остатки81288 ч60 ч8 чНужен слой итогов. В конструкторе аналитик накликивает его за день; в обычной базе его пишет программист — таблицы итогов, пересчёт, выкладка.
тяжёлые отчёты по сырым данным, дашборд за год, любые срезы3121260 ч40 ч40 чПроизвольная аналитика по сырым данным — не сильная сторона квинтетов: под неё заводят отдельную витрину, и это работа вне конструктора.
7Насколько сложны сами запросы — нужны ли цепочки, вложенность, рекурсия?
вес 8
выборки, фильтры, списки — и только885000Обоим подходам это ничего не стоит.
агрегаты и соединения: сводные отчёты по нескольким сущностям7851 ч16 ч1 чТакой отчёт в конструкторе собирается за минуты: колонки выбирают из общего списка, связи между таблицами система проставляет сама, итог считает функция вроде СУММ или СЧЁТ. В обычной базе его пишут на SQL руками, и отдельной работой становится, где его показать, кому открыть и как выгрузить (разбор такого отчёта).
цепочки: запрос поверх запроса, рекурсивный обход иерархии, сопоставление многие-ко-многим с вычислениями8756 ч120 ч6 чЗдесь разрыв самый большой. В конструкторе отчёт вставляется в отчёт по имени, а обход дерева на любую глубину — это ссылка на соседний отчёт, а не код: цепочку собирает тот же аналитик, что ведёт структуру (массовое сопоставление каталогов сделано четырьмя запросами, без программиста). В обычной базе то же самое пишет человек, умеющий рекурсивный SQL, и живёт это вне платформы — права, публикация результата и версии становятся отдельной работой.
8Нужен ли поиск и фильтр по любому полю?
вес 8
да, пользователи фильтруют по чему угодно8454 ч40 ч4 чВ квинтетах поиск по любому полю закрыт одним общим индексом; в обычной базе индекс заводят под каждую колонку.
нет, фильтры по 2–3 известным полям4852 ч00Если ищут по двум-трём известным полям, общий индекс квинтетов — плата за возможность, которая не нужна.
9Как устроены связи между сущностями?
вес 4
плоские записи, ссылок мало243000Плоские записи читаются целиком — честного преимущества у квинтетов здесь нет.
много ссылок, иерархии, обход по связям433048 ч0Связи и иерархии в квинтетах есть по устройству; в обычной базе под каждую пару сущностей заводят ключи и переписывают запросы.
10Нужен ли векторный поиск?
вес 4
нет443000
да34324 ч24 ч24 чВекторы кладут в отдельную таблицу рядом — работы поровну у обоих подходов.
11Нужны ли геоданные?
вес 8
нет885000
точки и радиус вокруг точки38540 ч8 ч8 чТочку и расстояние можно посчитать и в квинтетах, но без готового геоиндекса — руками в приложении.
полигоны, пересечения, маршруты088—24 ч24 чПолигоны и маршруты без специального геодвижка не делаются — для чистых квинтетов это стоп.
12Кто ещё читает данные напрямую, мимо платформы?
вес 8
никто; отчёты через платформу и HTTP-выгрузку885000Отчёты отдаёт сама платформа: Power BI подключается к ней за пять минут.
есть, читают редко (интегратор, аудитор раз в квартал)58524 ч00Стороннему читателю нужны привычные таблицы с колонками — для квинтетов их придётся готовить отдельно.
постоянная синхронизация в хранилище, dbt, ORM288160 ч20 ч20 чВнешние системы ждут обычных таблиц: над квинтетами придётся построить и поддерживать отдельную выгрузку.
13Сколько экземпляров системы предстоит развернуть?
вес 8
один экземпляр, одна компания685000Тиражировать нечего — сильная сторона квинтетов здесь не работает.
десятки экземпляров, у клиентов разная структура84520 ч400 ч20 чНовый клиент со своей структурой в квинтетах — это настройка; в обычной базе у каждого своя схема и свои миграции.
SaaS на сотни арендаторов82850 ч650 ч50 чСотни клиентов на одной системе: для квинтетов это штатный режим, в обычной базе — отдельная большая работа по разделению клиентов и обновлению всех сразу.
Потолок баллов и самый трудоёмкий набор ответов10010090688 ч1400 ч342 чу комбинации потолок баллов ниже ста по устройству шкалы, а к часам добавлена надбавка за стык
Перекос в ценебаллы не меняются—+80 ч—Ответ 3-б «аналитик без программиста» вместе с ответом 7-в «цепочки запросов» — перекос в цене РСУБД: собрать такую цепочку своими силами некому, её заказывают на стороне. К 120 часам самой разработки добавляются постановка, ожидание, приёмка и переделка при каждом изменении структуры — +80 чел.-ч. Квинтеты и комбинация собирают цепочку в конструкторе теми же людьми, которые ведут структуру, поэтому их часы не меняются.

Источник чисел — меморандум «Квинтеты против традиционных таблиц»: экспресс-выбор, сводная таблица и разделы 2.4–2.6. Про геоданные меморандум замеров не делал: вопрос 11 держится на отсутствии геотипа и геоиндекса в ядре, это оценка составителя. Разбор цепочки запросов из вопроса 7 опубликован отдельно.

Массовое сопоставление каталогов · Тот же разбор на Хабре · На главную