Реализация масштабного планировщика в базе данных - PullRequest
0 голосов
/ 02 сентября 2018

У нас есть БД Postgres с таблицей из десятков миллионов строк. У нас также есть планировщик (код приложения), который запускается в этих строках и запрашивает определенные ресурсы. Обычно нам нужны 30 дней старых вещей.

Мы начали масштабирование, и планировщик работает очень медленно.

Каков наилучший подход к масштабированию с поддержанием хорошей производительности? Используете другую БД? Redis? ES? Разделить Postgres?

Спасибо!

1 Ответ

0 голосов
/ 02 сентября 2018

Обычно нам нужны 30 дней старых вещей.

Это та часть вашего вопроса, которая на самом деле актуальна. Postgresql при правильном использовании не должен иметь никаких проблем при выполнении простого WHERE запроса с десятками миллионов строк. Стоимость поиска индекса растет логарифмически.

Чтобы сделать удар в темноте: если вы выполняете вычисления даты для каждой строки в своем выражении WHERE, производительность действительно будет ужасной. Например:

SELECT * FROM my_data WHERE AGE(CREATED_AT) > INTERVAL '30 days';

... это довольно плохая идея. Вместо этого рассчитайте дату отсечения один раз и статически используйте ее в сравнении.

Если ваш запрос действительно более сложный, вы также можете посмотреть на expression indices. В приведенном выше примере это излишне, и оно добавляет некоторые накладные расходы ко всем операциям изменения данных, но делает запрос так же, как приведенный выше, а также статический вариант.

В любом случае: EXPLAIN SELECT ... ваш друг, и публикация его результатов сделает вас еще больше друзьями здесь.

...