Java应用程序中的性能改进

时间:2015-12-16 21:08:41

标签: java database performance collections sql-tuning

这更像是一个设计/架构问题,但也很容易在代码中找到它的方式。当提高部署在应用服务器上的Java应用程序与数据库通信以检索记录的性能时,最佳方法是什么?

通过调整SQL,ORM,任何其他形式的调优或在Java代码中根据数据,调优代码等选择最佳集合来提高数据库层的性能。

对于一个真实场景,我需要从BLOB中解析一些数据以寻找一些属性。

一种选择是从dB获取所有数据并遍历列表查找特定属性,从而过滤记录;

其他选项是通过使用复杂查询/存储过程以及使用BLOB上的Oracle函数构建REG Ex来限制来自DB的数据。

想知道一些来自现实世界问题的实用指南。我们在这里谈论的数百万行是我所指的数据。我确实使用DB层进行过滤,但仍然没有很好地测试非常大的数据集。

修改

问题很简单:这个应用程序/模块有一个前端和后端与Oracle通信。需要从包含Java序列化对象的BLOB中检索和过滤数据。什么更有效?

使用RAW函数解析BLOB并构建正则表达式(由于BLOB中的数据更改而失败)或 通过JDBC获取数据(使用hibernate在一些持久层之上构建API),然后在Java层中过滤它。

这是一个有效的应用程序的真实问题。我甚至与DBA讨论过,并建议在Java层中过滤它。

参考问题:

How can I avoid "raw variable length too long" errors in SQL Developer?

How do I get textual contents from BLOB in Oracle SQL

1 个答案:

答案 0 :(得分:1)

就在今天,我试图在我写的应用程序中找到加速。 就像你一样,我事先猜测了缓慢的来源是什么。

特别是,我认为应用程序是I / O绑定的,所以很少能做到。我错了。

我使用the method I always use,发现只有大约40%的时间在I / O中。 剩下的60%可以改进,并且导致大约2倍的加速,之后它实际上 I / O限制。

带走了什么? 事先猜测需要修复什么并没有什么坏处。 相信他们只会有害。