Как структурировать БД для производительных, настраиваемых агрегатов? - PullRequest
0 голосов
/ 04 марта 2019

Я планирую настроить базу данных для некоторых элементарных агрегатов.План состоит в том, чтобы предоставлять нашим пользователям такие запросы, как SELECT SUM(energy) WHERE ...

energy - это простое числовое поле.Предложение WHERE более интересно, потому что мы предоставляем пользователю некоторую (ограниченную) настраиваемость, в основном просто AND, используя некоторые поля для равенства.Как A=3, A=3 AND B=92 и т. Д.

Я не администратор базы данных, но мое чувство производительности покалывает.В настоящее время я ожидаю загрузки O(user * record) в базу данных, если запросы будут выполнены сразу.Есть ли способ оптимизировать это лучше?

Если бы условие WHERE было исправлено, то мы могли бы просто предоставить представление или иным образом предварительно рассчитать и кэшировать сумму.К сожалению, в этом случае мы будем предоставлять ограниченную возможность настраивать выражение WHERE, предлагая пользователям по умолчанию некоторые поля для AND.

Мне кажется, что каждый из этих запросов агрегацииОбход в основном всей таблицы или значительных подразделов таблицы, один обход на пользовательский запрос.Имеет ли это смысл?

Какие есть способы оптимизации для такого типа рабочего процесса?Должен ли я просто осколок многих моих полей?Я рассматриваю, сколько реплик использовать, хотя я не уверен, что |replicas| сможет опередить рост пользователей или данных из-за совокупности данных запросов агрегации.

С точки зрения низкогона уровне производительности, имеет ли смысл структурировать эти запросы как SELECT SUM(energy)>N WHERE ... и надеяться, что PostgreSQL достаточно умен, чтобы завершить работу раньше, когда будет найдено, что промежуточный итог уже превышает порог N?

Наконецмогут ли NoSQL или TSDB дать преимущества для этого рабочего процесса, или их производительность будет сопоставима с базой данных SQL?

Обновление

Поскольку большинство этих запросов будут выполнятьсяпо расписанию, я думаю, я потрясу их, чтобы распределить нагрузку в течение дня.Но я все еще стремлюсь найти более эффективные способы оптимизации таблиц для этой нагрузки, если группа активных пользователей внезапно отправит запросы агрегации сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...