Технологии

ClickHouse: колоночная база данных для аналитики и больших логов

27 минАктуально на 19 августа 2026

ClickHouse: колоночная база данных для аналитики и больших логов

Твоя игра «Змейка» вдруг стала популярной. Каждый день тысячи игроков запускают уровни, набирают очки, заканчивают партии — и каждое событие записывается в базу данных. Сначала записей мало, и обычная база вроде Postgres справляется на «ура». Но через месяц строк становится миллионы, а ты хочешь узнать: какой средний результат за день? Сколько партий дошло до десятого уровня? Какая длительность игры самая популярная? На таких вопросах Postgres начинает тормозить, потому что перебирать миллионы строк ради одной цифры — тяжёлая работа. Именно здесь на сцену выходит ClickHouse — база данных, специально созданная для мгновенных подсчётов по огромным таблицам. Ниже — простыми словами, чем колоночное хранение отличается от привычного, когда ClickHouse реально нужен, а когда достаточно обычной базы, и как подключить его на практике.

Содержание
  1. Что такое колоночная база данных простыми словами
  2. Чем колоночное хранение принципиально отличается от построчного
  3. Когда ClickHouse реально нужен новичку
  4. Почему ClickHouse не заменяет Postgres
  5. Пример на «Змейке»: таблица событий игры
  6. Как устроен путь события: от действия до агрегата
  7. Как подключить ClickHouse на практике
  8. Что важно знать про запросы в ClickHouse
  9. Ограничения и честные минусы ClickHouse
  10. Сценарии из реальной жизни
  11. Подводные камни при переходе на ClickHouse
  12. Как понять, что ClickHouse уже пора
  13. ClickHouse в экосистеме современного приложения
  14. Партиционирование и первичный ключ в ClickHouse
  15. Как ClickHouse сжимает данные
  16. ClickHouse против других колоночных баз
  17. Частые вопросы
  18. Заключение

Что такое колоночная база данных простыми словами

Обычная база данных, например Postgres или MySQL, хранит данные построчно. Это значит, что информация об одной записи лежит вместе: если в таблице есть пользователь, его email, дата регистрации и город, то все эти поля для одного человека хранятся рядом на диске. Так удобно, когда нужно прочитать одну конкретную запись: «покажи мне всё о пользователе с id 42». База находит строку и возвращает все её столбцы сразу.

Колоночная база данных делает наоборот: она хранит данные по столбцам. Все значения одного столбца лежат вместе на диске. Все email идут одним блоком, все даты регистрации — другим, все города — третьим. Сначала кажется странным: зачем разрывать строки? Но оказывается, что для аналитики это гораздо эффективнее.

Когда тебе нужно посчитать средний возраст пользователей, базе не нужно читать всю таблицу. Ей достаточно открыть один столбец «возраст» и быстро просуммировать его значения. В построчной базе пришлось бы читать все строки целиком, вытаскивая из каждой только одно число. Это как если бы ты искал в библиотеке среднюю толщину книг: в построчном хранилище ты таскаешь с полок все книги, открываешь каждую и меряешь толщину линейкой. В колоночном — у тебя есть отдельная табличка «толщина всех книг», и ты сразу считаешь среднее.

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

Чем колоночное хранение принципиально отличается от построчного

Разница между построчным и колоночным хранением — не просто техническая деталь, а фундаментальная особенность, которая определяет, для чего подходит база.

В построчной базе строка — это единица хранения. Когда приложение добавляет новый заказ, база записывает id заказа, id пользователя, сумму, статус, дату и адрес доставки одним непрерывным куском. Это удобно для операционной работы: оформить заказ, изменить статус, отменить заказ, найти заказ по номеру. Postgres отлично справляется с такими задачами.

В колоночной базе столбец — это единица хранения. Все значения одного столбца сжимаются вместе, часто сильнее, чем целые строки, потому что в одном столбце данные однотипные. Например, в столбце «дата» много повторяющихся значений, в столбце «страна» тоже. Однотипные данные сжимаются лучше, чем разнородные строки. А ещё важнее другое: когда нужен запрос вида «сумма продаж по месяцам», ClickHouse читает только один или два столбца, игнорируя всё остальное.

Представь таблицу с миллионом событий игры «Змейка». В каждой строке записаны: id игрока, время начала, время конца, набранные очки, длина змейки, уровень, результат. Если Postgres захочет посчитать средний счёт за день, ему придётся прочитать миллион строк целиком, хотя нужен только один столбец «очки». ClickHouse прочитает только столбец «очки» и вернёт ответ за доли секунды.

Кроме того, колоночные базы обычно не любят частые изменения отдельных строк. В Postgres ты можешь обновить email пользователя одним запросом, и это будет быстро. В ClickHouse обновление данных возможно, но работает иначе и медленнее, потому что данные хранятся большими сжатыми блоками по столбцам. Поэтому ClickHouse не заменяет основную базу, а дополняет её.

Критерий Postgres ClickHouse
Единица хранения Строка Столбец
Лучше всего для Операционные данные Аналитика и агрегации
Скорость вставки отдельной строки Высокая Ниже
Скорость агрегаций по миллионам строк Низкая Очень высокая
Обновление и удаление Быстрое и гибкое Возможно, но медленнее
Транзакции ACID Да Ограниченно
Сжатие данных Хорошее Очень хорошее для однотипных столбцов

Таблица показывает, что инструменты не конкурируют, а дополняют друг друга. У каждого своя ниша.

Когда ClickHouse реально нужен новичку

Для первого учебного проекта ClickHouse почти наверняка избыточен. Если в твоей «Змейке» сотня игроков и несколько тысяч записей, Postgres справится с любыми вопросами мгновенно. Добавлять ClickHouse стоит только тогда, когда аналитика действительно выросла из возможностей обычной базы.

Когда это происходит? Вот реальные сигналы:

  • Миллионы событий в месяц. Если приложение пишет логи каждого действия пользователя, таблица быстро растёт. Подсчёты по ней в Postgres начинают занимать секунды и минуты.
  • Нужны сложные агрегации в реальном времени. Среднее, сумма, количество уникальных пользователей, процентильное время отклика — всё это ClickHouse считает быстро.
  • Дашборды и метрики. Когда бизнес хочет видеть графики посещаемости, конверсии, дохода с обновлением каждую минуту.
  • Хранение логов и событий. Кто когда зашёл, какой уровень прошёл, где произошла ошибка — такие данные накапливаются быстрее всего.
  • Ретроспективный анализ. Когда нужно сравнивать метрики за месяцы и годы, Postgres начинает тяжело переваривать огромные диапазоны данных.

В контексте курса, где мы разбираем базы данных для новичка, Postgres остаётся основным инструментом. Он надёжно хранит пользователей, рекорды, заказы, профили. ClickHouse добавляется рядом, когда появляется задача анализировать большие потоки событий.

Почему ClickHouse не заменяет Postgres

Этот тезис важно уяснить сразу: ClickHouse и Postgres — это не конкуренты, а соседи на разных этажах одного здания. Postgres отвечает за операционные данные: создание пользователя, сохранение заказа, обновление статуса, проверку уникальности email. Это задачи, где важна целостность данных, транзакции и быстрый доступ к отдельным записям.

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

Если попытаться использовать ClickHouse как единственную базу для всего приложения, скорее всего возникнут проблемы. Обновление профиля пользователя, проверка уникальности логина, отмена заказа — всё это будет работать хуже, чем в Postgres. Поэтому правильная схема: основные данные остаются в Postgres, а копия событий или агрегированных данных отправляется в ClickHouse для аналитики.

Кстати, для большинства учебных проектов и даже небольших продуктов вполне хватает готовой аналитики вроде Яндекс Метрики и Вебмастера. Если речь идёт о посещаемости сайта, источниках трафика и поведении пользователей, не обязательно поднимать свой ClickHouse — можно подключить готовый сервис. Собственная аналитическая база нужна, когда данных много и важны специфичные метрики, которых нет в готовых инструментах.

Пример на «Змейке»: таблица событий игры

Давай сделаем ситуацию конкретной: в «Змейке» появилась таблица событий game_events. Каждый раз, когда игрок заканчивает партию, приложение записывает строку:

Столбец Пример значения Что означает
event_id 123456 Уникальный номер события
user_id 789 Кто играл
started_at 2026-08-19 14:32:00 Когда начал
finished_at 2026-08-19 14:35:42 Когда закончил
score 1523 Набранные очки
level 7 Уровень сложности
duration_seconds 222 Длительность в секундах
result win Победа или поражение

Через полгода таких строк накопилось десять миллионов. Ты хочешь узнать средний счёт за последние сутки. В Postgres запрос выглядит просто:

SELECT AVG(score) FROM game_events WHERE finished_at >= NOW() - INTERVAL '1 day';

Но базе приходится прочитать огромное количество строк, чтобы посчитать одно число. На слабом сервере это может занимать несколько секунд или даже десятков секунд. А если пользователь открывает дашборд и видит пустой экран пять секунд — это плохой опыт.

В ClickHouse тот же запрос выполняется за доли секунды, потому что читается только столбец score для нужного диапазона. База не тратит время на чтение user_id, level, result и других полей, которые для этого запроса не нужны.

А если тебе нужен более сложный отчёт — например, средний счёт по уровням сложности за каждый день недели — ClickHouse справится быстрее и с большими объёмами.

Как устроен путь события: от действия до агрегата

Чтобы было понятно, как данные попадают в ClickHouse и как потом получают ответ, посмотри на схему ниже. Она показывает типичный путь события в приложении с двумя базами данных.

flowchart TB
    A["Пользователь совершил действие"] --> B["Событие пишется в ClickHouse"]
    A --> C["Основные данные пишутся в Postgres"]
    B --> D["Аналитический запрос считает агрегат за секунды"]
    C --> D

Схема наглядно показывает разделение потоков. Когда пользователь совершает действие — например, заканчивает партию в игре — приложение делает две вещи параллельно или последовательно. Основные данные, которые могут понадобиться для операционной работы, сохраняются в Postgres. Там же хранится профиль пользователя, рекорд, достижения, баланс. А копия события отправляется в ClickHouse, где она становится частью большой аналитической таблицы.

Когда тебе нужен отчёт, запрос идёт в ClickHouse. База быстро сканирует нужные столбцы и возвращает агрегат. Postgres при этом не нагружается тяжёлыми аналитическими запросами и продолжает быстро обслуживать обычные запросы приложения.

Как подключить ClickHouse на практике

Для новичка самый простой путь — использовать управляемый сервис. Это когда провайдер сам устанавливает, настраивает и поддерживает базу, а ты получаешь адрес, логин и пароль и подключаешься к ней из приложения. Примеры таких провайдеров — Yandex Cloud, Selectel и другие облачные платформы. У них обычно есть веб-консоль, где можно создать кластер ClickHouse, выбрать конфигурацию и получить строку подключения. Конкретные тарифы и лимиты нужно смотреть на сайте выбранного сервиса, потому что они регулярно меняются.

Альтернатива — запустить ClickHouse самостоятельно через Docker. Если ты уже умеешь работать с Docker, это даст полный контроль и не требует облачных расходов. Но для продакшена нужно будет самому настраивать резервные копии, мониторинг, обновления и отказоустойчивость. Для учебных целей и тестов Docker-подход вполне подходит.

Важно: не нужно искать «волшебную» бесплатную конфигурацию для миллиардов строк. ClickHouse может быть ресурсоёмким, если данных много. Для старта хватит минимальной конфигурации, а при росте объёма придётся добавлять память и дисковое пространство.

После создания базы подключение из приложения происходит через драйвер или HTTP-интерфейс. ClickHouse понимает SQL, хотя и с некоторыми особенностями. Например, типичный запрос на создание таблицы для событий игры может выглядеть так:

CREATE TABLE game_events (
    event_id UInt64,
    user_id UInt32,
    started_at DateTime,
    finished_at DateTime,
    score UInt32,
    level UInt8,
    duration_seconds UInt16,
    result String
) ENGINE = MergeTree()
ORDER BY (finished_at, user_id);

Типы данных в ClickHouse немного отличаются от Postgres: UInt32 — это беззнаковое целое, DateTime — дата и время, MergeTree — движок хранения, оптимизированный для аналитики. Подробнее о синтаксисе можно прочитать в официальной документации ClickHouse.

Что важно знать про запросы в ClickHouse

SQL в ClickHouse похож на обычный SQL, но есть нюансы. Например, для группировок часто используется ключевое слово GROUP BY, как и в Postgres, но функции агрегации могут называться иначе или иметь дополнительные возможности.

Пример запроса, который считает средний счёт по уровням за последние семь дней:

SELECT
    level,
    AVG(score) AS avg_score,
    COUNT(*) AS games_count
FROM game_events
WHERE finished_at >= now() - INTERVAL 7 DAY
GROUP BY level
ORDER BY level;

ClickHouse выполнит этот запрос очень быстро даже на десятках миллионах строк, потому что прочитает только столбцы level, score и finished_at.

Ещё одна полезная возможность — материализованные представления. Это такие заранее посчитанные агрегаты, которые ClickHouse обновляет по мере поступления данных. Например, можно создать представление, которое каждый час считает средний счёт за день. Тогда дашборд будет загружаться мгновенно, потому что ответ уже посчитан.

Но для старта не нужно углубляться в оптимизацию. Достаточно понимать базовый принцип: ClickHouse хорошо считает агрегации по большим таблицам, и чем более однотипные данные в столбце, тем лучше он сжимает и быстрее считает.

Ограничения и честные минусы ClickHouse

У ClickHouse есть особенности, которые делают его неудобным для некоторых задач. Их стоит знать заранее, чтобы не пытаться использовать инструмент не по назначению.

Медленные операции обновления и удаления. ClickHouse оптимизирован для вставки и чтения, а не для постоянного изменения старых записей. Если тебе нужно часто обновлять данные, лучше оставить эту работу Postgres.

Нет полноценных транзакций в привычном смысле. В Postgres есть ACID-транзакции: ты можешь сделать несколько операций и либо все они применятся, либо ни одна. В ClickHouse транзакционная модель другая, и для операционных данных это может быть критично.

Сложнее настроить и поддерживать, чем Postgres. Даже управляемые сервиси требуют понимания специфики: движки таблиц, партиционирование, репликация, резервное копирование. Это не сложнее, чем освоить любой другой серьёзный инструмент, но времени на погружение нужно больше, чем для Postgres.

Не всегда нужен. Если у тебя тысячи строк в месяц, ClickHouse будет бесполезен. Разница в скорости не окупит усилий по внедрению и поддержке.

Поэтому ClickHouse — это инструмент для конкретной задачи, а не «крутая штука, которую надо поставить всем».

Сценарии из реальной жизни

Чтобы лучше почувствовать, где ClickHouse применяется, рассмотрим несколько примеров из разных областей.

Веб-аналитика. Сервис отслеживает каждый просмотр страницы, клик, переход. Таблица событий растёт на миллионы строк в день. ClickHouse позволяет строить отчёты по источникам трафика, воронкам, удержанию пользователей.

Игровая аналитика. Каждое действие игрока — вход в игру, начало уровня, покупка, поражение — записывается в базу. Разработчики хотят видеть, на каком уровне чаще всего бросают игру, какие предметы покупают чаще, сколько в среднем длится сессия.

Логи приложений. Сервер пишет логи каждого запроса: время, статус, длительность, ошибки. Когда в приложении десятки серверов, логов становится огромное количество. ClickHouse помогает быстро найти, какие запросы тормозят, где происходят ошибки, как меняется нагрузка со временем.

Финансовая аналитика. Транзакции, платежи, выплаты — огромные таблицы, по которым нужно считать обороты, комиссии, балансы. ClickHouse справляется с такими объёмами лучше, чем операционная база.

IoT и мониторинг. Датчики отправляют миллионы показаний в час: температура, давление, расход энергии. ClickHouse позволяет агрегировать эти данные и строить графики в реальном времени.

Во всех этих случаях основные данные остаются в обычной базе, а ClickHouse получает копию для анализа.

Подводные камни при переходе на ClickHouse

Когда разработчики впервые сталкиваются с ClickHouse, они иногда совершают одни и те же ошибки.

Ошибка 1: пытаться хранить в ClickHouse всё подряд. Основные данные приложения — пользователи, заказы, настройки — должны оставаться в Postgres. ClickHouse — только для аналитических таблиц.

Ошибка 2: ждать от ClickHouse быстрых обновлений. Если ты привык обновлять строки в Postgres, поведение ClickHouse может удивить. Изменения данных возможны, но происходят асинхронно и могут быть дорогими.

Ошибка 3: Игнорировать партиционирование. ClickHouse позволяет разбивать таблицы на части по дате или другим критериям. Это ускоряет запросы, которые обращаются к конкретному периоду. Без партиционирования запросы будут медленнее.

Ошибка 4: Вставлять данные по одной строке. ClickHouse любит пакетные вставки. Если отправлять по одному событию, производительность будет низкой. Лучше накапливать события и вставлять пачками.

Ошибка 5: Не делать резервные копии. Как и любая база, ClickHouse требует резервного копирования. Управляемые сервисы обычно делают это автоматически, но при самостоятельной настройке это твоя ответственность.

Как понять, что ClickHouse уже пора

Есть несколько честных признаков, что обычная база перестала справляться с аналитикой:

  • Запросы на агрегацию занимают больше нескольких секунд и тормозят интерфейс.
  • Ты начинаешь добавлять индексы, кэширование и материализованные представления в Postgres, но проблема не решается.
  • Объём данных растёт быстрее, чем растёт производительность сервера.
  • Появляется потребность в дашбордах с обновлением в реальном времени.
  • Нужно анализировать не только текущие данные, но и историю за месяцы и годы.

Если хотя бы два-три пункта из этого списка про тебя — пора изучать колоночные базы данных.

ClickHouse в экосистеме современного приложения

Современное приложение редко состоит из одной базы данных. Обычно это набор специализированных инструментов, каждый из которых решает свою задачу. Postgres хранит основные данные. Redis кэширует частые запросы и хранит сессии. RabbitMQ или аналог управляет фоновыми задачами. ClickHouse занимается аналитикой. Elasticsearch отвечает за полнотекстовый поиск. Вместе они образуют архитектуру, которая масштабируется под разные виды нагрузки.

Для новичка это может звучать сложно, но на практике инструменты добавляются по мере роста проекта. Сначала одна Postgres. Потом, когда появляется много пользователей, добавляется Redis. Когда появляются фоновые задачи — RabbitMQ. Когда данных становится много — ClickHouse. Когда поиск становится важен — Elasticsearch. Каждый шаг оправдан конкретной проблемой, а не модой.

Партиционирование и первичный ключ в ClickHouse

Одна из причин, почему ClickHouse так быстро считает агрегации по диапазонам дат, — партиционирование. Партиция — это логическое разбиение таблицы на части. Обычно таблицы разбивают по месяцам или дням. Когда запрос просит данные за последние сутки, ClickHouse читает только партиции за эти сутки, а не всю таблицу.

Представь книгу с закладками на каждую главу. Если тебе нужна только пятая глава, ты открываешь закладку и читаешь нужные страницы. Без закладок пришлось бы листать всю книгу. Партиции — это такие закладки для данных.

Первичный ключ в ClickHouse тоже важен, но работает иначе, чем в Postgres. В Postgres первичный ключ гарантирует уникальность и ускоряет поиск конкретной строки. В ClickHouse первичный ключ определяет порядок данных внутри партиций и помогает отсекать ненужные диапазоны при запросах. Например, если данные отсортированы по finished_at, запрос за конкретный час прочитает только соответствующий кусок.

При создании таблицы для событий игры можно добавить партиционирование по месяцам:

CREATE TABLE game_events (
    event_id UInt64,
    user_id UInt32,
    started_at DateTime,
    finished_at DateTime,
    score UInt32,
    level UInt8,
    duration_seconds UInt16,
    result String
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(finished_at)
ORDER BY (finished_at, user_id);

Здесь PARTITION BY toYYYYMM(finished_at) означает, что данные будут разбиты по месяцам на основе поля finished_at. Запросы за конкретный месяц будут читать только одну партицию.

Как ClickHouse сжимает данные

Ещё одно преимущество колоночного хранения — эффективное сжатие. Когда в столбце много повторяющихся или похожих значений, ClickHouse сжимает их гораздо сильнее, чем если бы они хранились вперемешку с другими столбцами.

Например, в таблице событий игры столбец result может содержать только два значения: "win" и "lose". ClickHouse запишет эти значения компактно, не повторяя их для каждой строки отдельно. Столбец level содержит небольшие числа от 1 до 10, их тоже можно сжать эффективно. А столбец score содержит более разнообразные числа, но даже он сожмётся лучше, чем целые строки.

За счёт сжатия ClickHouse может хранить большие объёмы данных на меньшем дисковом пространстве, чем построчная база. Это важно, когда речь идёт о терабайтах логов и событий.

ClickHouse против других колоночных баз

ClickHouse не единственная колоночная база данных. Есть и другие инструменты: Apache Druid, Apache Pinot, Amazon Redshift, Google BigQuery, Snowflake. Они тоже ориентированы на аналитику, но имеют разные модели использования.

ClickHouse выделяется тем, что его можно запустить самостоятельно на своём сервере или в Docker. Он не привязан к конкретному облаку и не требует обязательной оплаты за управляемый сервис. Это делает его популярным выбором для проектов, которые хотят контролировать инфраструктуру.

Управляемые колоночные базы вроде BigQuery или Snowflake берут на себя всю инфраструктуру, но стоят дороже и привязывают к облачному провайдеру. Выбор зависит от бюджета, масштаба и предпочтений команды. Для новичка ClickHouse часто удобнее именно потому, что его легко попробовать локально.

Частые вопросы

Можно ли заменить Postgres на ClickHouse полностью?

Нет, и не стоит. Postgres и ClickHouse решают разные задачи. Postgres хорош для операционных данных, транзакций и быстрого доступа к отдельным записям. ClickHouse — для аналитики и агрегаций по большим таблицам. В нормальной архитектуре они работают вместе.

ClickHouse бесплатный?

Сам ClickHouse распространяется с открытым исходным кодом и бесплатен для использования. Но если ты запускаешь его в облаке, платишь за ресурсы сервера. Если используешь управляемый сервис, платишь провайдеру. Конкретные цены зависят от провайдера и конфигурации, поэтому их лучше смотреть на официальных сайтах.

Нужен ли ClickHouse для учебного проекта вроде «Змейки»?

Скорее всего, нет. Для сотен или тысяч записей Postgres справляется мгновенно. ClickHouse становится полезен, когда записей миллионы и нужны сложные агрегации. На старте лучше сосредоточиться на основной базе и готовой аналитике вроде Яндекс Метрики.

Какие данные лучше хранить в ClickHouse?

События, логи, метрики, транзакции — любые данные, которые накапливаются большими объёмами и по которым нужно считать агрегации. Например, «игрок набрал X очков за Y секунд», «пользователь открыл страницу», «сервер обработал запрос за Z миллисекунд».

ClickHouse сложно освоить новичку?

Базовые концепции понять несложно: он хранит данные по столбцам и быстро считает агрегации. Но настройка, оптимизация и поддержка в продакшене требуют времени. Для первого знакомства достаточно понимать, зачем он нужен и как подключить через управляемый сервис или Docker.

Можно ли использовать ClickHouse вместе с уже существующей базой данных?

Да, это самый распространённый сценарий. Приложение продолжает работать с Postgres, а аналитические события дублируются в ClickHouse. Так ты не ломаешь существующую архитектуру, а добавляешь мощный инструмент для отчётности.

Заключение

ClickHouse — это колоночная база данных, которая умеет за доли секунды считать агрегации по миллионам и миллиардам строк. Она не заменяет Postgres, а работает рядом с ним: Postgres хранит основные данные приложения, а ClickHouse — аналитические события и логи.

Для новичка ClickHouse становится актуален, когда проект растёт из учебного в реальный продукт с большим потоком событий. На старте достаточно обычной базы данных и готовых инструментов аналитики. Но понимание принципа колоночного хранения помогает заранее готовиться к масштабированию и не пытаться решить проблему медленных агрегаций индексами и кэшем там, где нужна другая архитектура.

Если ты видишь, что запросы на подсчёты начинают тормозить, а таблицы событий растут на миллионы строк — пришло время посмотреть на ClickHouse. Начни с управляемого сервиса или Docker-контейнера, заведи туда копию событий и попробуй построить первый аналитический отчёт. Это отличный шаг навстречу взрослой архитектуре приложения.

Читай дальше

Все статьи

Не просто статьи — тебя доведут до результата

В практикуме за 2499 ₽ рядом живая команда практикующих разработчиков и маркетологов: ведём по шагам до твоего работающего приложения. Не «ролики и сам разбирайся» — помогаем на каждом затыке.

Перейти к практикуму
Все статьи Ещё: технологии и архитектура