Есть таблица запросов:
CREATE TABLE dns_requests (
request_id BIGINT PRIMARY KEY,
requested_at TIMESTAMP,
node_id INT,
domain TEXT,
record_type TEXT,
ttl_seconds INT
);
Правила:
• Ключ кеша: node_id + domain + record_type.
• Первый запрос - MISS, он создаёт запись в кеше.
• Запись действует до requested_at + ttl_seconds.
• Запрос в момент истечения TTL — уже MISS.
• HIT не обновляет TTL.
• Новый MISS заменяет старую запись.
При одинаковом времени порядок задаёт request_id.
Напишите один SQL-запрос, который вернёт:
request_id
cache_status -- HIT / MISS
cache_loaded_at
cache_expires_at
source_request_id -- какой MISS создал запись
Главная ловушка: ttl_seconds у HIT использовать нельзя — срок жизни определяется последним MISS.
Дополнительно посчитайте для каждого узла процент запросов, обработанных локально, и количество обращений к CoreDNS.
Условия: PostgreSQL, без процедур, циклов и временных таблиц.