1

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

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

还有哪些其他策略可用于填充此报告数据库?

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

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

4

4 回答 4

1

我会再看看SSIS。虽然有一个学习曲线,但它可以非常灵活。它支持许多不同的方式来操作数据,包括存储过程、ActiveX 脚本和各种操作文件的方式。它能够处理错误并通过电子邮件或日志记录提供通知。基本上,它应该能够处理几乎所有事情。另一种选择,自定义应用程序,可能需要更多的工作(SSIS 已经涵盖了很多基础知识)并且仍然很脆弱 - 对数据结构的任何更改都需要重新编译和重新部署。我认为对您的 SSIS 包进行更改可能会更容易。

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

于 2010-01-05T15:53:37.943 回答
1

我们的一般流程是:

  1. 将源表中的数据复制到加载数据库中具有完全相同结构的表中
  2. 将数据转换为临时表,其结构与最终的事实/维度表相同
  3. 将数据从临时表复制到事实/维度表

SSIS 适用于第 1 步,这或多或少是一个 1:1 的复制过程,具有一些基本的数据类型映射和字符串转换。

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

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

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

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

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

于 2010-01-05T15:58:17.393 回答
1

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

几点考虑:

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

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

于 2010-01-05T18:31:47.307 回答
0

我已经运行了基于存储过程的数据仓库,并且我使用了 SSIS。两者都不比另一个恕我直言。我听说过管理现代 ETL 复杂性的最佳工具称为数据构建工具 (DBT) ( https://www.getdbt.com/ )。它具有大量功能,使事情更易于管理。需要刷新报告服务器中的特定表?一个命令将重建它,包括将它依赖的所有表刷新回源。需要动态 SQL?这为 Jinja 提供了以您从未想过的方式编写动态 SQL 的脚本。需要对数据库中的内容进行版本控制?DBT 为您服务。毕竟,它是免费的。

于 2021-09-10T17:56:41.077 回答