我正在开发基于spring+Hibernate的web应用程序。在这个应用程序中,我必须对数据库中的50000个可用记录进行计算。当前逻辑:-
目前,这些计算都需要大约38个小时来完成单线程。
现在我们想通过多线程来运行这个系统。为了测试的目的,我取了50张唱片。
使用单线程大约需要30秒。
使用两个线程:-
粗略代码:-
for (int i = 0; i < recordsSize; i++) {
final int j = i;
String recordId = list.get(i);
// Method call : Code for creating CALCULATION_TEMP table
// CALCULATION_TEMP table will contain dynamic number of column. It is depends on the record data (50 to 70 columns)
// return flag value
boolean flag = xyzMethod(....);
if (flag) {
// All calculation done in this method
// Around 600 - 700 rows will be created into CALCULATION_TEMP table on the basis of calculation logic
Object fileMapColumnData[] = /* Method call */;
// Insert result for one record into RESULT table for unique recordId (this result is calculated in CALCULATION_TEMP table)
insertIntoResultTable(....);
// Drop CALCULATION_TEMP table
} else {
LOGGER.error("Unable to calculate ... because of some wrong data");
loggerDTO.getCustomLogger().severe("Unable to calculate ... because of some wrong data");
}
if (i % 100 == 0) {
calculationDao.flushAndClear();
}
// Thread for showing process completion status in percentage
Thread t = new Thread() {
@Override
public void run() {
getPercentageDone((float) recordsSize, (float) (j + 1));
}
};
t.start();
}
请建议,我如何提高性能。
对于性能改进没有硬性规定。如果您有约束和业务决策,我们需要知道计算,如何管理线程,如何管理连接,以及涉及的循环数等等。有很多事情需要考虑。从检查痛点区域、为此花费的时间开始,并首先改进每种方法。
创建/删除临时表需要花费50000倍的大量时间。没有临时表能做计算吗?可以提高工作效率。
问题内容: 我想用一个查询插入多个行,例如: 有没有一种方法可以轻松地做到这一点,最好是针对这样的对象数组: 我可能最终将500条记录放在一个块中,因此运行多个查询将是不可取的。 到目前为止,我只能对单个对象执行此操作: 附带的问题:使用符号插入是否可以防止SQL注入? 问题答案: 我是pg-promise的作者。 在旧版本的库中,Performance Boost文章中的简化示例涵盖了这一点,在
问题内容: 嘿,我有一个连接两个不相关表的Junction表。两个表都有。我需要使用不同的值从每个表中选择,例如,这就是我的看法: 我见过的所有示例都使用一条语句,但是两个表具有相同的值,在这种情况下,它们不是。 问题答案: 试试这个查询:
问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广
我在节点js代码中有2个数组 我试着用一个数组来做。它成功地执行了,但它不能与2个数组一起工作。我应该怎么做呢? 我为一个数组编写的Mysql插入查询如下所示:
问题内容: 我想从select语句插入到表中,但是,从select语句返回3列,并且该表有4列,我想为额外列中的所有行添加0。谁能给我一个示例SQL查询吗? 谢谢! 问题答案: 只需在您的选择中添加“ 0”即可。
问题内容: 我正在尝试使用Linq / EntityFramework将数据从C#应用程序保存到数据库中。插入到一个表很简单,但是我不确定如何将数据插入到三个都与自动增量标识互连的表中?这是一个小问题,所以我使用一个线程及其所有帖子- 每个 ThreadTitle 和每个 Post 都与一个 User (不是实际的表名)相关联。 我的设计思想是将完整线程刮入内存,然后进行“批量”插入。为了减少负载