对于我们的报告应用程序,我们有一个流程,每晚将多个数据库聚合到一个“报告”数据库中。报告数据库的模式与我们聚合的单独“生产”数据库的模式完全不同,因此有大量的业务逻辑可用于汇总数据。
现在,此过程由几个每晚运行的存储过程实现。随着我们向报告数据库添加更多细节,存储过程中的逻辑变得越来越脆弱和难以管理。
可以使用哪些其他策略来填充此报告数据库?
我正在寻找有关上述内容的任何新想法或其他想法。谢谢!
答案 0 :(得分:1)
我会再看看SSIS。虽然存在学习曲线,但它可以非常灵活。它支持许多不同的方法来操作数据,包括存储过程,ActiveX脚本和各种操作文件的方法。它能够处理错误并通过电子邮件或日志记录提供通知。基本上,它应该能够处理几乎所有事情。另一个选项,一个自定义应用程序,可能会有更多工作(SSIS已经涵盖了很多基础知识)并且仍然很脆弱 - 对数据结构的任何更改都需要重新编译和重新部署。我认为改变你的SSIS包可能会更容易。对于一些更复杂的逻辑,您甚至可能需要使用多个阶段 - 一个自定义C#控制台程序来稍微操作数据,然后使用SSIS包将其加载到数据库。
SSIS学习有点痛苦,并且肯定有一些技巧可以充分利用它,但我认为这是值得的投资。一两本好的参考书可能是一个很好的投资(Wrox的专家SQL Server 2005集成服务也不错)。
答案 1 :(得分:1)
我们的一般流程是:
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书籍或顾问,以帮助理解典型的功能和方法。