我有一个典型的场景&需要了解处理这个问题的最佳方法,所以在这里 -
我正在开发一种解决方案,该解决方案将从基于SOAP的远程Web服务&然后将此数据推送到网络上的Oracle数据库。 此外,这将是一个每15分钟执行一次的计划任务。
我在远程服务上有事件队列,其中包含自上次检索以来已完成的INSERT / UPDATE / DELETE操作,&一旦我检索了最近15分钟的事件,它再次添加事件以供下次检索。
现在,它只是将数据推送到Oracle,所以我的所有交互都是INSERT&更新声明。
Oracle上有大约60个表,其中一些表有100多列。此外,每15分钟循环一次,将有大约60-70个插入,100多个更新& 10-20删除。
这将是一个可执行的jar文件,它将在操作后终止。将在接下来的15分钟周期内再次开始。
所以,我需要了解如何处理WRITE操作(最佳实践)以提高整个应用程序的性能?
当前测试代码(每个周期) -
感谢您的帮助!
答案 0 :(得分:0)
如果您一次插入或更新一行,可以考虑执行批量插入或批量更新。事实证明,如果您尝试在一定数量之后更新或插入行,则可以获得更好的性能。
答案 1 :(得分:0)
您正在谈论的数据库操作数量(每15分钟200个)很小,很容易在不到15分钟内完成。一些具体的建议:
您应该分析您的应用程序,以了解它花费时间的位置。如果你不这样做,那么你不知道下一步要优化什么,你不知道你做了什么帮助或伤害。
如果可能,尝试将所有事件一次性到达远程服务器。
您应该重用与远程服务的连接(可能通过使用支持连接持久性和重用的库)。
您应该使用连接池库重用数据库连接,而不是为每个插入/更新/删除创建新连接。信不信由你,一旦掌握了连接,创建连接可能需要100倍于数据库操作。
您应该考虑在同一事务中执行多个(或全部)数据库操作,而不是为每个已更改的行创建新事务。但是,您应该仔细考虑您的失败模式,以免丢失任何事件(如果这是一个重要的考虑因素)。
您应该考虑使用预准备语句缓存。这可能会有所帮助,但如果Oracle配置正确,可能不会。
您应该考虑尝试分析您的操作,以找到可以一起批处理的任何操作。如果您经常进行一些“热门”操作,这可以快得多。
答案 2 :(得分:0)
"我是一个典型的场景"
不,你没有。您拥有定制的架构,具有独特的数据模型,独特的数据和独特的业务需求。这不是一件坏事,它几乎是每个计算机系统都没有现成的(甚至其中一些)。
所以,这是一个实验,你必须这样做。没有"最佳实践"。尝试各种各样的事情,看看什么最好
"需要了解处理此问题的最佳方式"
通过雇用了解Oracle数据库的人,您将极大地提高成功的机会。