填充报表/数据仓库数据库的策略

时间:2010-01-05 15:40:09

标签: database reporting-services data-warehouse

对于我们的报告应用程序,我们有一个流程,每晚将多个数据库聚合到一个“报告”数据库中。报告数据库的模式与我们聚合的单独“生产”数据库的模式完全不同,因此有大量的业务逻辑可用于汇总数据。

现在,此过程由几个每晚运行的存储过程实现。随着我们向报告数据库添加更多细节,存储过程中的逻辑变得越来越脆弱和难以管理。

可以使用哪些其他策略来填充此报告数据库?

  • SSIS?这已被考虑,但似乎没有提供更简洁,更可维护的方法,只有存储过程。
  • 一个单独的C#(或任何语言)进程,它聚合内存中的数据,然后将其推送到报告数据库中?这将允许我们为逻辑编写单元测试,并以更加可维护的方式组织代码。

我正在寻找有关上述内容的任何新想法或其他想法。谢谢!

3 个答案:

答案 0 :(得分:1)

我会再看看SSIS。虽然存在学习曲线,但它可以非常灵活。它支持许多不同的方法来操作数据,包括存储过程,ActiveX脚本和各种操作文件的方法。它能够处理错误并通过电子邮件或日志记录提供通知。基本上,它应该能够处理几乎所有事情。另一个选项,一个自定义应用程序,可能会有更多工作(SSIS已经涵盖了很多基础知识)并且仍然很脆弱 - 对数据结构的任何更改都需要重新编译和重新部署。我认为改变你的SSIS包可能会更容易。对于一些更复杂的逻辑,您甚至可能需要使用多个阶段 - 一个自定义C#控制台程序来稍微操作数据,然后使用SSIS包将其加载到数据库。

SSIS学习有点痛苦,并且肯定有一些技巧可以充分利用它,但我认为这是值得的投资。一两本好的参考书可能是一个很好的投资(Wrox的专家SQL Server 2005集成服务也不错)。

答案 1 :(得分:1)

我们的一般流程是:

  1. 将源表中的数据复制到 表格完全相同 加载数据库中的结构
  2. 将数据转换为暂存 表,具有相同的结构 作为最终事实/维度表
  3. 将登台表中的数据复制到 事实/维度表
  4. SSIS适用于第1步,它或多或少是1:1的复制过程,具有一些基本的数据类型映射和字符串转换。

    对于第2步,我们使用混合的存储过程,.NET和Python。大多数逻辑都在程序中,例如在外部代码中进行大量解析。纯TSQL的主要好处是,转换通常依赖于加载数据库中的其他数据,例如,在SQL JOIN中使用映射表比在外部脚本中执行逐行查找过程要快得多,即使使用缓存也是如此。不可否认,这只是我的经验,对于syour数据集,程序处理可能更好。

    在少数情况下,我们必须进行一些复杂的解析(DNA序列),而TSQL不是一个可行的解决方案。这就是我们使用外部.NET或Python代码来完成工作的地方。我想我们可以在.NET程序/函数中完成所有操作并将其保存在数据库中,但是还需要其他外部连接,因此单独的程序是有意义的。

    第3步是一系列INSERT ... SELECT ...语句:它很快。

    总而言之,使用最好的工具来完成工作,不要担心混淆。 SSIS包(或包)是将存储过程,可执行文件以及您需要执行的任何其他操作链接在一起的好方法,因此您可以在一个位置设计,执行和记录整个加载过程。如果这是一个巨大的过程,你可以使用子包。

    我知道你对TSQL的意思很尴尬(实际上,我发现它比其他任何东西都更重复),但它对于数据驱动的操作非常非常快。所以我的感觉是,在TSQL和字符串处理中进行数据处理或在外部代码中进行其他复杂操作。

答案 2 :(得分:1)

我会看一下ETL(提取/转换/加载)最佳实践。您要问的是购买与建筑,特定产品和特定技术。首先备份几个步骤可能是值得的。

一些注意事项:

  • 提供良好的ETL有很多微妙的技巧:使其运行速度非常快,管理非常容易,处理规则级审计结果,支持高可用性甚至可靠的恢复,甚至可以用作恢复过程。报告解决方案(而不是数据库备份)。
  • 您可以构建自己的ETL。缺点是商业ETL解决方案具有预构建的适配器(您可能不需要),并且定制ETL解决方案往往会失败,因为很少有开发人员熟悉所涉及的批处理模式(请参阅您现有的架构)。由于ETL模式没有得到很好的记录,因此除非您引入在此领域非常有经验的开发人员,否则不可能成功编写自己的ETL解决方案。
  • 在查看商业解决方案时请注意,元数据和审核结果是解决方案中最有价值的部分:基于GUI的转换构建器实际上并不比编写代码更有效 - 但元数据可能比阅读维护时的代码。
  • 使用单个ETL产品很难解决复杂环境 - 因为网络访问,性能,延迟,数据格式,安全性或其他与ETL工具不兼容的要求。所以,定制和组合的组合;无论如何,商业往往会产生结果。
  • 如果您需要支持或关键功能,像Pentaho这样的开源解决方案确实是商业解决方案。

所以,如果从商业应用程序中提取数据,如果要求(性能等)很难,或者如果你有一个初级或不可靠的编程团队,我可能会使用商业产品。否则你可以自己写。在这种情况下,我会得到一本ETL书籍或顾问,以帮助理解典型的功能和方法。