【发布时间】:2013-09-02 03:49:24
【问题描述】:
我有一个简单的用例,但它确实没有优化,我想知道它是否可以。
假设我有一个简单的实体,其中包含一个ID 和一个名为price 的变量(该实体称为Product)。
我正在使用Hibernate 和JPA,我想每小时更新我的产品价格,所以这里是伪代码:
List<Product> products = Product.retrieveAll();
for (Product p : products) {
p.price = makeSomeComplexComputationsToGetNextPrice();
p.save(); // Updates the entity in the DB
}
这段代码非常简单。 makeSomeComplexComputationsToGetNextPrice(); 使用 CPU 进行一些计算,而且速度很快。
当我有 100 个产品时,一切正常(代码发出 101 个 sql 请求),但假设我有 10 000 个产品,代码发出 10 001 个 sql 请求,这需要几秒钟。
这个用例是我真实用例的简化版本,但问题就在这里:当我有太多产品时,执行需要很长时间(因为查询量很大)。
使用hibernate 和JPA,有没有办法优化这样的用例? (这段代码应该不到一秒的时间来执行,而且由于所有的查询,它需要的时间远远超过 1 秒)
非常感谢您的帮助
【问题讨论】:
-
makeSomeComplexComputationsToGetNextPrice是用来访问数据库的? -
您为什么不尝试首先从数据库中检索您的数据,然后查询/操作/计算该数据?
-
@Christian 这就是 OP 目前正在做的事情。
-
@Christian 这就是我正在做的事情:检索产品,修改变量,然后通过 sql 更新它们
标签: java mysql sql hibernate jpa