JPA查询优化用于多次迭代功能

时间:2016-08-10 08:41:34

标签: java postgresql jpa server-side genetic-algorithm

我需要帮助优化服务器端Java程序的一部分。我会尽可能地简化解释。

我有一台Java服务器需要最大化A,B,C三个对象的功能。我总是找到三者中最不合适的,并用数据库中的另一个随机替换它。

对于大约100次迭代,大约需要2.5秒,对于250次,我已经达到9秒。

我试图找到花费最多时间的东西,我在JPA查询中失去了大约70%的时间。我认为问题是我执行查询以获得每次迭代的随机新对象。

val am = new ArrayMerger(Array(43, 78), Array(2, 36, 77, 87, 99)).toStream
am(1) // 36
am(4) // 78
am(6) // 99  <-- only now have all elements been evaluated

设置参数

Query q = em.createQuery("SELECT object FROM Obj o WHERE .... ORDER BY random()");

Obj可以是A,B或C.每种类型在Postgres DB中都有自己的表。

解决方案是从单个查询中获取大量数据然后进行&#34;搜索&#34;在Java List中工作? 是否有办法在JPA中使用缓存或在Java中使用多线程? 有关我的方法的任何其他想法?它是一种即兴的,是我第一次实现这样的东西。

1 个答案:

答案 0 :(得分:2)

我会尝试猜测一个id。

将您的选择语句更改为

$('.treeview input[type=checkbox]').on('change', function () {
    var value = $(this).attr('title'); // this will get you the VALUE
});

这不能找到一个对象,但它可以并且会更快。 这里解释了正确的随机函数:http://www.techonthenet.com/postgresql/functions/random.php

当然,您可以使用Obj和所有现有ID创建一个List 随机选择一个接一个的查询。如果ID的数量足够小以将所有ID保留在内存中,这将起作用。你可以很容易估计这一点 当为每个ID计算四个字节时。

SELECT object FROM Obj o WHERE id = random(select max(id) from obj)