使用SQL实现复杂的计算,或者更确切地说使用ETL


Implement complex calculations with SQL or rather use ETL?

我们目前正在使用PHP (Zend Framework 2)和Doctrine作为ORM-Tool (MySQL数据库)开发一个财务分析web应用程序。复杂的财务计算在服务器端完成,因为客户端必须尽可能简单。数据应该是近乎"实时"的,因为用户是实时输入数据的。所有用户数据将立即传输到服务器。

对于财务计算,我们必须使用自定义过滤和数据聚合连接多个表。业务逻辑和计算相当复杂。

因此,我们关心的是在SQL语句中混合业务逻辑和规则(封装原则)。即使使用ORM工具,一些语句也将是本地SQL,不容易理解/修改。

我们考虑使用ETL或BI软件进行数据处理。但是大多数ETL工具和BI软件都是用Java编写的,它们与PHP的集成似乎相当麻烦。我们是一个由5名PHP开发人员组成的团队,对ETL的设计和处理知之甚少。我们在ETL中看到的最关键的缺点是处理时间、延迟和数据的最新性。

在我们的情况下,是否建议使用ETL工具/商业智能软件?还是应该坚持复杂的Doctrine/SQL语句,将业务逻辑与SQL纠缠在一起?

我不确定这个问题是不是在征求意见。这个答案的目的是给你一些在做选择时需要考虑的东西。

选择"外部"ETL还是"内部"ETL取决于几个因素:

  • 开发人员的技能集。
  • ETL要求。
  • 数据转换的特定要求。
  • 数据库性能的特定要求。

在许多情况下,您可以在数据库中或使用外部工具完成相同的目标。外部工具的优点是它们不会妨碍数据库服务器——或者至少您可以更容易地控制它。此外,外部工具是为移动数据和处理数据而设计的,因此它们通常提供更好的连接性、性能和错误报告。

也就是说,如果您的技能集中在SQL上,那么将数据加载到staging表并在数据库中完成工作也是可行的。我经常发现我更喜欢在数据库中做这样的处理,但这取决于项目的要求。