我们应该每小时接收一次(3h范围)我们的每日报告(24h范围),如果发现我们需要匹配,该报告将包含与数据库中的交易记录(reference,id1,id2)的条目匹配(reference,id1,id2)将此记录包括在我们对报告金额的最终比较中以及数据库中匹配记录金额的计算总和中。 我们使用JEE7,到目前为止,我们已经想出这个办法: 1.解析/反序列化XML流进入到杰克逊使用Java对象 2.一旦内存10K对象的门槛达到总和/过滤这些对象,然后将它们序列化为json,然后将它们临时存储在DB中。3.因此,在完成完整分析之后,我们将对db中的Entry进行过滤/求和并序列化为json数据。从现在开始,我们开始并行比较这些Entry对象和我们的Transaction记录。在这里,我需要一些优化,因为我们所要做的就是比较这些Entry(reference,id1,id2)= Transaction(reference,id1,id2),如果找到匹配项,我们将在最终计算中考虑此Transaction,因为它是我们的一部分报告。因此,基本上所有(reference,id1,id2)都应该是唯一的。我正在阅读有关ora_hash函数或多列索引的信息,以加快此查找的速度。然后,SQL IN子句有一些限制(1000条记录),请参见此处。我们还使用Ejb Async方法来实现这种并行性,并且仍然需要了解此异步调用何时结束而不希望引入线程延迟。我想知道这种方法的一些优化方法,总的来说,如果我们在RHS上标记所有交易之后,这种方法是否可行,则步骤4就是查询并汇总所有这些金额,并与本报告附带的金额进行匹配,由此得出结论我们的过程。
2 回答
![?](http://img1.sycdn.imooc.com/533e4c5600017c5b02010200-100-100.jpg)
ABOUTYOU
TA贡献1812条经验 获得超5个赞
在这种情况下的典型方法是:
将文件中的数据加载到暂存表中
在数据库(包括登台表)上运行报告
资料载入
临时表应具有三个参考,ID1和ID2和适当的指数与有效参与交易表。
您可以使用Oracle SQL * Loader有效地加载XML数据。但是,由于您已经拥有许多Java代码,因此也可以使用Java和JDBC加载它。为了获得最佳性能,请使用JDBC批处理。
运行报告
运行报表时,请加入登台表,例如:
SELECT SUM(amount)
FROM Transaction t
JOIN Staging s on t.reference = t.reference
AND t.id1 = s.id1 AND t.id2 = s.id2;
在此设置中,最有可能不需要并行处理。它只是利用了以下事实:关系数据库系统可以有效地处理大块数据(而不是逐条记录)。
添加回答
举报
0/150
提交
取消