【问题标题】:Help figuring out approaches to (near) real time multi dimensional data querying帮助找出(接近)实时多维数据查询的方法
【发布时间】:2009-03-26 15:11:24
【问题描述】:

我有一个涉及许多相关表的系统。考虑一个标准的类别/产品/订单/客户/订单项目场景。有些表是自引用的(如类别)。这些表都不是特别大(大约 100k 行,估计规模约为 100 万行)。我需要考虑这些数据的很多维度,但必须以近乎实时的方式进行查询。我也不知道特定用户对哪些维度感兴趣——它可以是众多表格中的一个或多个标准。事情可以从

  1. 给我所有的夹克类别
  2. 给我所有的夹克类别->上个月在纽约购买的红色派克大衣
  3. 把所有不是在纽约买的超过 100 美元的东西都给我。

目前我们有一个很长的 SP,它使用“级联数据”方法——我们逐个表,使用为该表指定的任何标准将所有内容过滤到一个临时表中。对于下一个表,我们将当前临时表连接到我们正在使用的任何表,并将新的过滤器集应用到新的临时表中。它可以工作,但可管理性和性能很慢。我需要更好的东西。

我需要一种新的方法来解决这个问题。显然需要 OLAP,可能使用星型模式。这可以实时工作吗?它可以配置为实时工作吗?我应该使用索引视图来创建一组非规范化表吗?我应该将其完全卸载到数据库之外吗?

仅供参考,我们正在使用 Sql Server。

【问题讨论】:

  • 实时对您意味着什么?你在做电子游戏吗?如何明确需要 OLAP?
  • 我同意 Karl 的观点,这似乎不是实时的,只是如何让它表现得好/快
  • 不,这不适用于视频游戏。我的主要观点是我不想等待很长时间来重新计算多维数据集——结果应该出现在插入/更新之后。我认为它需要 OLAP,因为跨表的维度数使得关系查询变得困难。

标签: sql-server database database-design olap


【解决方案1】:

正如您所说,这非常适合 OLAP。 使用 Sql Server 2005 和 2008,您可以设置几乎实时的解决方案。你应该:

  • 创建非规范化星型架构
  • 使用该架构构建 OLAP 多维数据集
  • 启用主动缓存以在基础数据源更改时更新多维数据集。

这不是一件小事,您需要企业版的 Sql Server 才能使用主动缓存。您还需要一些前端工具(也许 excel 可以)来消耗立方体。

【讨论】:

    【解决方案2】:

    最好在您的代码中构建一个动态查询,其中包含您需要的所有连接,并针对每个单独的请求进行定制。 (当然为了安全而适当地参数化)。

    您将使用许多与现在相同的级联逻辑,但您将其移至代码而不是数据库。然后您只需提交您需要的确切查询。

    性能会优于使用所有临时表,并且在运行一些查询后您可能会获得一些缓存优势。

    【讨论】:

    • 然后确保您已设置所有索引以使其实际工作,这可能会影响写入性能并迫使您采用问题中概述的解决方案。
    【解决方案3】:

    在我看来,您的困境是“每次需要时都执行复杂的处理以获得相同的结果更好,还是应该只对每个新数据执行一次?”。

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多