추론 상세 geom-list 오래 걸리는 현상 수정
This commit is contained in:
@@ -294,8 +294,10 @@ public class InferenceDetailDto {
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class Geom {
|
||||
|
||||
Long geoUid;
|
||||
UUID uuid;
|
||||
String uid;
|
||||
Integer compareYyyy;
|
||||
@@ -314,6 +316,7 @@ public class InferenceDetailDto {
|
||||
String fitState;
|
||||
|
||||
public Geom(
|
||||
Long geoUid,
|
||||
UUID uuid,
|
||||
String uid,
|
||||
Integer compareYyyy,
|
||||
@@ -328,6 +331,7 @@ public class InferenceDetailDto {
|
||||
String subUid,
|
||||
String pnu,
|
||||
String fitState) {
|
||||
this.geoUid = geoUid;
|
||||
this.uuid = uuid;
|
||||
this.uid = uid;
|
||||
this.compareYyyy = compareYyyy;
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity;
|
||||
import com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity;
|
||||
import com.kamco.cd.kamcoback.postgres.entity.QModelMngEntity;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.Tuple;
|
||||
import com.querydsl.core.types.Expression;
|
||||
import com.querydsl.core.types.Projections;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
@@ -37,13 +38,10 @@ import com.querydsl.core.types.dsl.CaseBuilder;
|
||||
import com.querydsl.core.types.dsl.Expressions;
|
||||
import com.querydsl.core.types.dsl.NumberExpression;
|
||||
import com.querydsl.core.types.dsl.StringExpression;
|
||||
import com.querydsl.jpa.JPAExpressions;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -448,12 +446,14 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto
|
||||
NumberExpression<Long> inkxNoAsLong =
|
||||
Expressions.numberTemplate(Long.class, "cast({0} as long)", mapInkx5kEntity.mapidcdNo);
|
||||
|
||||
/* 미사용
|
||||
StringExpression pnu =
|
||||
Expressions.stringTemplate(
|
||||
"nullif(({0}), '')",
|
||||
JPAExpressions.select(Expressions.stringTemplate("string_agg({0}, ',')", pnuEntity.pnu))
|
||||
.from(pnuEntity)
|
||||
.where(pnuEntity.geo.geoUid.eq(mapSheetAnalDataInferenceGeomEntity.geoUid)));
|
||||
*/
|
||||
|
||||
// 4) content
|
||||
List<Geom> content =
|
||||
@@ -461,6 +461,7 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto
|
||||
.select(
|
||||
Projections.constructor(
|
||||
Geom.class,
|
||||
mapSheetAnalDataInferenceGeomEntity.geoUid,
|
||||
mapSheetAnalDataInferenceGeomEntity.uuid,
|
||||
mapSheetAnalDataInferenceGeomEntity.resultUid,
|
||||
mapSheetAnalDataInferenceGeomEntity.compareYyyy,
|
||||
@@ -475,7 +476,7 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto
|
||||
Expressions.stringTemplate(
|
||||
"substring({0} from 1 for 8)",
|
||||
mapSheetAnalDataInferenceGeomEntity.resultUid),
|
||||
pnu,
|
||||
Expressions.constant(""),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState))
|
||||
.from(mapSheetAnalInferenceEntity)
|
||||
.join(mapSheetAnalDataInferenceEntity)
|
||||
@@ -490,6 +491,33 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto
|
||||
.limit(pageable.getPageSize())
|
||||
.fetch();
|
||||
|
||||
// 4-1) pnu 를 geoUid 로 검색하기 -> AS-IS 에서는 전체 tb_pnu 를 조회해서 오래 걸렸음
|
||||
List<Long> geoUids = content.stream().map(Geom::getGeoUid).filter(Objects::nonNull).toList();
|
||||
Map<Long, String> pnuMap = new HashMap<>();
|
||||
|
||||
if (!geoUids.isEmpty()) {
|
||||
StringExpression pnuAgg = Expressions.stringTemplate("string_agg({0}, ',')", pnuEntity.pnu);
|
||||
|
||||
List<Tuple> pnuRows =
|
||||
queryFactory
|
||||
.select(
|
||||
pnuEntity.geo.geoUid,
|
||||
Expressions.stringTemplate("string_agg({0}, ',')", pnuEntity.pnu))
|
||||
.from(pnuEntity)
|
||||
.where(pnuEntity.geo.geoUid.in(geoUids))
|
||||
.groupBy(pnuEntity.geo.geoUid)
|
||||
.fetch();
|
||||
|
||||
pnuMap =
|
||||
pnuRows.stream()
|
||||
.collect(
|
||||
Collectors.toMap(row -> row.get(pnuEntity.geo.geoUid), row -> row.get(pnuAgg)));
|
||||
}
|
||||
|
||||
for (Geom geom : content) {
|
||||
geom.setPnu(pnuMap.get(geom.getGeoUid()));
|
||||
}
|
||||
|
||||
// 5) total (조인 최소화 유지)
|
||||
Long total =
|
||||
queryFactory
|
||||
|
||||
Reference in New Issue
Block a user