В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Разделите хранение документов и истории, извлечение фактов, поиск релевантного контекста и генерацию ответа. Доступ к медицинским данным проверяйте до поиска и до выдачи.
Сделайте управляемый backfill с границей между историей и новым потоком. Каскадная MV видит вставленные блоки, а не итог дедупликации ReplacingMergeTree.
Хороший ключ шардирования сочетает достаточную кардинальность, равномерность нагрузки и локальность частых запросов. Равное число строк не гарантирует равный объём работы.
Передавайте ответ частями по мере генерации: для однонаправленного потока подходит SSE, для двустороннего обмена — WebSocket. Интерфейс постепенно дописывает текст.
Логи отправляются асинхронно через локальный агент или буфер в брокер, затем индексируются в поисковом хранилище. Чтение и уведомления отделяются от приёма.
Каждый сервис владеет своей БД; gateway маршрутизирует запросы, а заказы и остатки согласуются событиями с идемпотентной обработкой и компенсирующими действиями.
Начните с измерений и выберите дорогие повторные чтения с допустимой задержкой обновления. Кеш внедряют с явной стратегией ключей, инвалидирования и поведения при отказе.
При обычной модели у издателя много книг, а у книги несколько авторов: Book хранит publisher_id, связь с Author реализуется таблицей BookAuthor. Допущение об одном издателе нужно уточнить.
Для таких объёмов среднее обычно считают по предварительным агрегатам: храните сумму и количество по временным корзинам и нужным измерениям. Итоговое среднее — общая сумма, делённая на общее количество.
Кешировать выгодно часто читаемые данные, получение которых дорого и для которых допустима понятная политика устаревания. Решение принимают по измерениям нагрузки и ожидаемому hit rate.
Поды и виртуальные машины нельзя синхронизировать обычным внутрипроцессным lock. Нужен общий координатор: БД, очередь, распределённая блокировка или механизм выбора лидера — по смыслу задачи.