资金计算,java和Oracle / PL SQL之间的比较使用

在处理货币计算时,您可以根据自己的优势和劣势对Oracle / PL SQL和Java进行比较。 如果您要开发一个应用程序,它将处理大量的金钱计算,您将使用哪两个?为什么?

这个问题不是引起oracle / pl sql和java爱好者之间的争论我只是想知道什么被认为是这种要求的最佳实践或标准方法以及背后的原因。

场景将是:

  1. 数据来自数据库(最低Oracle 10g)。
  2. 该程序将根据聚合数据(100k-1M)记录计算和生成发票
  3. 业务规则非常复杂
  4. 业务规则可能每月至少更改一次
  5. 计算中将使用几个参考表
  6. 该计划将每天运行一次

提前致谢。

这些标准肯定有利于使用PL / SQL。

1)数据来自数据库(最低Oracle 10g)。
2)程序将根据聚合数据(100k-1M)记录计算和生成发票
5)计算中将使用几个参考表
6)程序将每天运行一次

如果它在数据库中并涉及数据,尤其是大量数据,则PL / SQL是默认选项。

其余标准评估起来比较棘手:

3)业务规则非常复杂
4)业务规则可能每月至少更改一次

PL / SQL绝对能够进行计算,并且它具有许多内置的算术function。 因此,它归结为“业务规则”和“复杂”的含义。 我们可以在PL / SQL中编写复杂的业务逻辑(我已经完成了)但Java具有语言function,这无疑使任务变得更容易:我正在思考像reflection和内省这样的东西。

也许您正在考虑使用规则引擎? 当然,金融服务业一直是规则引擎的主要用户。 并且从处理中抽象出规则集将使得更容易满足第四标准。

Java有两个已建立的Rule Engines, Drools和JESS 。 PL / SQL中有一个规则引擎,并且已经有一段时间了,但它主要用作Oracle Streams的一部分。 但是,API已暴露,因此可用于其他目的。 了解更多 。

如果您正在考虑规则引擎,那么我认为这会向Java倾斜。 业务规则处理是一种专业的编程范例,Java中的经验和支持比PL / SQL更多。 我怀疑这意味着在中间层而不是Java存储过程中使用Java,这对网络流量和性能有影响。

我认为你应该考虑的最重要的方面是“保持你的代码干 ”。 您应该不惜一切代价避免将复杂的业务规则复制到Java PL / SQL。 说完这个之后,你可能更喜欢将大部分内容放在PL / SQL中,因为当你真正需要时它会在程序,视图等中提供。

在任何情况下,出于性能原因,考虑到应用于中等数量数据的任务的复杂性,您可能会在数据库中执行“数据聚合”。 因此,如果您确实需要用于聚合的业务规则,则它们已在数据库中可用。 不需要往返于Java的往返。

你在这里面临一些有趣的权衡。

复杂,变化,业务逻辑? 这对计划结构非常重视。 OO技术肯定适用。 因此Java似乎很合适。 做认真处理客户端也可能有助于测试和版本控制,这也很重要。

但是,带回一百万行进行工作? 这将是一场性能挑战。

通过规范,您可以生成和维护结构良好的PL / SQL。 我的观察是,人们常常通过剪切和粘贴来重复使用,随着时间的推移,结构会丢失。 我不知道PL / SQL的IDE的当前状态,也许现在有一些工具可以帮助重构。 在Java世界中,确实重构工具非常好,因此保持良好结构的障碍很小。

我的理想情况是,跨越一百万行的一些查询集将导致需要复杂多维数据集的小数据集,我们可以在Java中进行修改。 因此,用于获取数据的SQL,用于处理数据的Java – 在不支付过多数据传输性能损失的情况下达到了两者的最佳位置。 我们对您的要求知之甚少,不知道是否可能。