我需要帮助优化服务器端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中使用多线程? 有关我的方法的任何其他想法?它是一种即兴的,是我第一次实现这样的东西。
答案 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)