帮助确定(近)实时多维数据查询的方法

时间:2009-03-26 15:11:24

标签: sql-server database database-design olap

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

  1. 给我一件夹克类别
  2. 给我一些夹克类别 - > Parkas在上个月在纽约购买的红色
  3. 给我一些在纽约没有购买的东西,价格超过100美元。
  4. 目前我们有一个非常长的SP,它使用“级联数据”方法 - 我们逐个表地进行,使用为该表指定的任何条件将所有内容过滤到临时表中。对于下一个表,我们将当前临时表连接到我们正在使用的任何表,并将新的过滤器集应用到新的临时表中。它可以工作,但可管理性和性能很慢。我需要更好的东西。

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

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

3 个答案:

答案 0 :(得分:2)

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

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

这不是一项微不足道的工作,您需要企业版的Sql Server才能使用主动缓存。你还需要一些前端工具(可能是excel会这样做)来消耗多维数据集。

答案 1 :(得分:0)

最好在代码中构建一个动态查询,其中包含您需要的所有连接,并根据每个请求进行自定义。 (当然,为安全性进行了适当的参数化)。

您将使用现在的大部分相同的级联逻辑,但是将其移动到代码而不是数据库。然后,您只需提交所需的确切查询。

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

答案 2 :(得分:0)

你的困境听起来像是“通过每次需要时执行复杂的处理来获得相同的结果是否更好,或者我应该只针对每个新的数据执行一次?”。