Существуют ли какие-либо специализированные базы данных для совокупных запросов? - PullRequest
7 голосов
/ 09 мая 2011

Существуют ли какие-либо специализированные базы данных - rdbms, nosql, key-value или что-либо еще - которые оптимизированы для выполнения быстрых агрегатных запросов или преобразования карт, например, для очень больших наборов данных:

select date, count(*)
from Sales
where [various combinations of filters]
group by date

До сих пор я проводил тесты на MongoDB и SQL Server, но мне интересно, есть ли более специализированное решение, предпочтительно такое, которое может масштабировать данные по горизонтали.

Ответы [ 5 ]

3 голосов
/ 09 мая 2011

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

Я потерял счет, сколько раз я видел огромные запросы отчетов с огромным количеством объединений и встроенных агрегатов подзапросов повсюду.

Вне головы, типичные шаги, чтобы сделать эти вещи быстрее:

  1. Используйте оконные функции там, где они доступны и применимы (т. Е. Оператор over ()). Абсолютно бессмысленно многократно повторять данные.

  2. Используйте общие табличные выражения (with запросы), где они доступны и применимы (т.е. наборы, которые, как вы знаете, будут достаточно малы).

  3. Используйте временные таблицы для больших промежуточных результатов и создайте для них индексы (и проанализируйте их) перед их использованием.

  4. Работайте с небольшими наборами результатов, фильтруя строки раньше, когда это возможно: select id, aggregate from (aggregate on id) where id in (?) group by id можно сделать намного быстрее, переписав его как select id, aggregate from (aggregate on id where id in (?)) group by id.

  5. Используйте union/except/intersect all вместо union/except/intersect, где это применимо. Это устраняет бессмысленную сортировку наборов результатов.

В качестве бонуса все первые три шага делают запросы отчета более удобочитаемыми и, следовательно, более легкими в обслуживании.

2 голосов
/ 09 мая 2011

Практически любая база данных OLAP , это именно то, для чего они предназначены.

2 голосов
/ 09 мая 2011

OLAP-кубы данных предназначены для этого. Вы денормализуете данные в формы, которые они могут быстро вычислить. Этапы денормализации и предварительного расчета могут занимать время, поэтому эти базы данных обычно создаются только для отчетов и отделены от данных транзакций в реальном времени.

1 голос
/ 09 мая 2011

Для определенных типов данных (большие объемы, временные ряды) kx.com предлагает, вероятно, лучшее решение: kdb + Если это похоже на ваши данные, попробуйте. Примечание: они используют не SQL, а более общий, более мощный и более сумасшедший язык теории множеств.

1 голос
/ 09 мая 2011

Oracle, DB2 Warehouse edition и, в меньшей степени, предприятие SQLServer очень хорошо справляются с этими агрегированными запросами - конечно, это дорогостоящие решения, и от их бюджета и бизнес-ситуации зависит, насколько оно того стоит.

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