【问题标题】:Are there any specialized databases for aggregate queries?是否有任何专门用于聚合查询的数据库?
【发布时间】:2011-08-21 13:10:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql mongodb database nosql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我已经记不清有多少次我看到大量的报表查询,到处都是大量的连接和内联子查询聚合。

      在我的脑海中,使这些事情变得更快的典型步骤是:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          几乎所有OLAP database,这正是他们设计的目标类型。

          【讨论】:

          • 据我所见,这看起来非常适合大规模使用。但是当你的规模不大时,你对流行的数据库有什么建议?
          【解决方案5】:

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

          【讨论】:

          • 您认为在 DB2 和 Oracle 中可用的当前 SQL Server 版本中缺少任何特定功能?
          • 与其说是功能问题,不如说是性能问题。 DB2 和 ORACLE 都可以以不同的方式将负载分散到多台机器上。 SQLServer 几乎仅限于一台机器。
          猜你喜欢
          • 1970-01-01
          • 2016-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-06
          • 2011-05-03
          • 1970-01-01
          相关资源
          最近更新 更多