2

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

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

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

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

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

4

3 回答 3

2

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

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

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

于 2009-03-26T16:17:42.933 回答
0

Your dilemma sounds to me like "Is it better to achieve the same result by performing complex processing every time I need it, or should I do it once only for each new piece of data?".

于 2009-03-27T01:49:48.207 回答
0

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

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

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

于 2009-03-26T15:36:00.833 回答