на PostgreSQL.
Подскажите, есть у меня приложение с очень интенсивным рейтом на запись.
Основная таблица с сущностями содержит 20 млн. строк:
Столбцы на чтение/обновление такие:
- subscribe_time
- queue_time
- done_time
Алгоритм такой:
- читаем чанк (30 тысяч строк) по такому условию: WHERE queue_time < 12_минут_назад AND done_time < 20_минут_назад AND subscribe_time < 1_час_назад
- сразу помечаем как queue_time = NOW() эти выбранные строки (30 тысяч)
- отправляем в сервер очередей
- после обработки, другое приложение принимает статус из сервера очередей, и обновляет done_time
- значение subscribe_time статично и не изменяется в процессе жизни строки, при вставке равно NOW()
Сейчас использую MariaDB и 8 партиций HASH (id). На каждую партицию свой воркер, в запросе это выглядет так: ... FROM table PARTITIONS (p0) ...
Вопрос в том, на сколько целесообразно перейти на постгрес, и не отгребу ли я проблем ещё больше?
В Maria столкнулся с проблемой, что падает производительность и не используется индекс.
Выглядет это так:
- производительность скатывается в жопу
- дропаю и пересоздаю индекс
- база чуть "оживает"
- через пару часов опять начинает отвечать медленно
Кейс не очень для mvcc. Но и цифры вроде не большие.
Обсуждают сегодня