Обновить

Как я снизил нагрузку на базу данных в 53 раза с помощью ChatGPT

Снижение нагрузки на базу данных: 60488 → 1136 CP за сутки
Снижение нагрузки на базу данных: 60488 → 1136 CP за сутки

Недавно запустил Telegram-бота для мониторинга сайтов. Он раз в 10 минут проверяет сайты, добавленные пользователями. Постепенно их проверка стала занимать существенное время.

Сначала я думал, что проблема в медленных сайтах и долгих ответах whois. Потом замерил разные участки кода и понял, что примерно 3 секунды для каждого из сайтов отрабатывает запрос к моей же базе данных (MySQL). С помощью него я получаю результаты предыдущих проверок: последней и последней успешной. Это нужно, чтобы сравнить с текущим результатом и уведомить пользователя об изменениях.

Запрос выглядел примерно так:

SELECT *
FROM 
    checks c
LEFT JOIN (
    SELECT *
    FROM checks c2
    WHERE c2.id = (
            SELECT MAX(c3.id)
            FROM checks c3
            WHERE c3.db_message_id = c2.db_message_id 
              AND c3.response_received = true
        )
) AS sub 
ON  c.db_message_id = sub.db_message_id
WHERE
    c.db_message_id = :db_message_id
ORDER BY c.id DESC 
LIMIT 1;

Я попросил ChatGPT o1-preview оптимизировать код, его предложение:

SELECT *
FROM
    (SELECT * 
     FROM checks 
     WHERE db_message_id = :db_message_id 
     ORDER BY id DESC 
     LIMIT 1) c
LEFT JOIN
    (SELECT *
     FROM checks
     WHERE db_message_id = :db_message_id AND response_received = true
     ORDER BY id DESC
     LIMIT 1) c2
ON 1=1;

Время обработки сайтов снизилось примерно в 10 раз, нагрузка на базу — в 53.

Кажется, подписка окупилась.

Теги:
Всего голосов 7: ↑6 и ↓1+10
Комментарии15

Записки из подполья незаконного архивирования фильмов

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

— Джордж Лукас, 1988 год

«Для меня её [оригинальной трилогии «Звёздных войн»] больше не существует. Я задумывал этот фильм именно так, и мне жаль, что вы увидели половину целого фильма и полюбили его.»

— Джордж Лукас, 2004 год

Ванкувер, 2011 год: мы с моей соседкой Виллой Росс сидим в одной из характерно стерильных монтажных студий Университета Саймона Фрейзера и уже не знаем, что делать: мы провели все выходные, ваяя из трёх разных копий вестерна Серджо Леоне 1966 года «Хороший, плохой, злой» одну версию — причём все три копии были незаконными рипами. В начале 2000-х этот фильм пал жертвой «реставрации», выполненной компанией MGM: вырезанные Серджо Леоне сцены были возвращены, увеличив время англоязычной версии с 161 до 179 минут; Клинт Иствуд и Илай Уоллак дублировали недостающие диалоги, а место умершего к тому времени Ли Ван Клифа занял похожий на него голосом дублёр. Монофоническая дорожка была переработана в многоканальный звук с неприятно современными звуками выстрелов. Почти десяток лет эта «дополненная» лента оставалась единственной продаваемой версией фильма; подобное очень часто происходит в эпоху ревизионистских студийных реставраций.

Наша цель была простой: спасти фильм от этой вивисекции. Мы планировали соединить звук уже не издававшегося DVD 1998 года (приблизительно похожий на звук международного релиза 1967 года) с видео из недавно привезённого Blu-ray итальянской версии. После того, как мы успешно преодолели многочисленные подводные камни, связанные с риппингом домашних видеозаписей конца 2000-х, наши надежды рухнули из-за катастрофического открытия: итальянская версия оказалась ещё сильнее отличающейся от международной, чем расширенная версия: печально известная сцена пытки была полностью перестроена, а у некоторых кадров отсутствовали начало и конец. Мы почти на десяток лет отказались от этой затеи.

Записки из подполья незаконного архивирования фильмов

Публикации