聚合查询是否有专门的数据库?

时间:2011-05-09 09:20:55

标签: sql mongodb database nosql

是否有任何专门的数据库 - rdbms,nosql,key-value或其他任何数据库 - 针对非常大的数据集运行快速聚合查询或map-reduce进行了优化:

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

到目前为止,我已经在MongoDB和SQL Server上运行了基准测试,但我想知道是否有更专业的解决方案,最好能够横向扩展数据。

5 个答案:

答案 0 :(得分:3)

根据我的经验,真正的问题与聚合查询性能关系不大,我发现在我尝试的所有主要数据库中,它都与查询编写方式有关。

我已经失去了我在各地看到大量报告查询和大量联接和内联子查询聚合的次数。

脱离我的头脑,让这些事情变得更快的典型步骤是:

  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。这将删除无意义的结果集排序。

  6. 作为奖励,前三个步骤都倾向于使报告查询更具可读性,从而更易于维护。

答案 1 :(得分:2)

几乎任何OLAP database,这正是他们设计的类型。

答案 2 :(得分:2)

OLAP数据立方体就是为此而设计的。您可以将数据反规范化为可以快速计算的表单。非规范化和预计算步骤可能需要一些时间,因此这些数据库通常仅用于报告,并且与实时事务数据分开。

答案 3 :(得分:1)

Oracle,DB2仓库版以及较小程度的SQLServer企业在这些聚合查询上都非常出色 - 当然这些都是昂贵的解决方案,它在很大程度上取决于您的预算和业务案例是否值得。

答案 4 :(得分:1)

对于某些类型的数据(大容量,时间序列),kx.com可能提供最佳解决方案:kdb +。如果它看起来像您的数据类型,请尝试一下。注意:它们不使用SQL,而是使用更通用,更强大,更疯狂的集合理论语言。