【问题标题】:Performance Improvements in a Java application [closed]Java应用程序中的性能改进[关闭]
【发布时间】:2016-03-23 04:28:06
【问题描述】:

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

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

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

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

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

想从现实世界的问题中了解一些实用的建议。对于我所指的数据,我们在这里谈论的是数百万行。我确实求助于使用 DB 层进行过滤,但仍然没有很好地测试非常大的数据集。

编辑:

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

使用 RAW 函数解析 BLOB 并构建正则表达式(由于更改 BLOB 中的数据可能会失败)或 通过 JDBC 获取数据(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

【问题讨论】:

  • 自从我遇到这个实际情况后,我发布了一个问题。我不确定我还能如何使这个问题合法化以获得有意义的回应。我见过比这更广泛的问题。
  • 对于投反对票的人。今天在想一个问题,发现一个类似的问题和我想到的非常相似http://stackoverflow.com/questions/17343157/static-method-behavior-in-multi-threaded-environment-in-java 没有否决了这个问题,实际上这个问题大约有 566 条回复。
  • 利用数据库的最佳方法是将搜索到的属性移出到列中。实际上,您应该摆脱 blob 并尽可能多地移动到列,然后使用 JPA。然后在数据库中的字段上添加索引,用QueryDSL在java中写出漂亮的查询。

标签: java database performance collections sql-tuning


【解决方案1】:

就在今天,我试图在我编写的应用程序中找到加速。 和你一样,我之前也猜测过缓慢的根源。

特别是,我曾假设该应用受 I/O 限制,因此几乎无能为力。我错了。

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

有什么收获? 事先猜测需要修复的内容并没有什么坏处。 相信他们只会有害处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2012-06-17
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    相关资源
    最近更新 更多