在一个Java应用程序中的性能提升

8 浏览
0 Comments

在一个Java应用程序中的性能提升

这更多是一个设计/架构问题,但也可以很容易地在代码中找到。当改善部署在应用服务器上并与数据库进行交互以检索记录的Java应用程序的性能时,最佳方法是什么?\n是通过调整SQL、ORM或其他形式的调优来改善数据库层的性能,还是通过根据数据选择最佳集合、调整代码等来改善Java代码的性能。\n对于一个真实场景,我有一个需求是从一个BLOB中解析一些数据并查找特定属性。\n一种选择是从数据库中获取所有数据,并通过遍历列表来查找特定属性,从而筛选记录;\n另一种选择是使用复杂的查询/存储过程限制从数据库中获取的数据,并使用Oracle的函数在BLOB上构建REG Ex。\n想要了解一些来自实际问题的实用指南。我所说的数据涉及到数百万行。我确实尝试了在数据库层进行过滤,但是还没有对非常大的数据集进行过充分测试。\n编辑:\n问题很简单:这个应用程序/模块有一个前端和一个后端,与Oracle进行通信。需要从包含Java序列化对象的BLOB中检索和筛选数据。哪种方法更高效?\n是使用RAW函数解析BLOB并构建正则表达式(由于BLOB中的数据变化可能导致失败),还是通过JDBC获取数据(API基于使用Hibernate的某个持久化层)然后在Java层进行筛选。\n这是一个真实的问题,有一个正在运行的应用程序。我甚至与一个数据库管理员讨论过,并建议在Java层进行筛选。\n参考问题:\n如何避免在SQL Developer中出现“raw variable length too long”错误?\n如何从Oracle SQL的BLOB中获取文本内容

0
0 Comments

问题的出现原因:我之前认为这个应用程序受到I/O限制,所以无法做太多优化。

解决方法:我使用了我经常使用的方法,并发现只有大约40%的时间是在I/O操作上。剩下的60%可以进行优化,并且在优化后,速度提高了大约2倍,之后才真正受到I/O限制。

文章整理如下:

最近,我试图在我编写的一个应用程序中寻找速度提升的方法。

和你一样,我之前对导致应用程序变慢的原因有些猜测。

特别是,我认为应用程序受到I/O限制,因此无法做太多优化。但我错了。

我使用了我经常使用的方法,发现只有大约40%的时间用于I/O操作。

剩下的60%可以进行优化,并且在优化后,速度提高了大约2倍,之后才真正受到I/O限制。

这给我们带来了什么启示呢?

我们对需要修复的问题有先入为主的猜测并不会造成任何伤害。

唯一会造成伤害的是相信这些猜测。

0