【发布时间】: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?
【问题讨论】:
-
自从我遇到这个实际情况后,我发布了一个问题。我不确定我还能如何使这个问题合法化以获得有意义的回应。我见过比这更广泛的问题。
-
对于投反对票的人。今天在想一个问题,发现一个类似的问题和我想到的非常相似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