Merge pull request 'fix: V2 캐시 조회 시 누락 MMSI DB fallback 추가' (#49) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m48s
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m48s
This commit is contained in:
커밋
9f98682347
@ -360,7 +360,7 @@ public class GisServiceV2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3-a. hourly 범위 → L2 캐시 → DB fallback
|
// 3-a. hourly 범위 → L2 캐시 → DB fallback (누락 MMSI 부분 fallback 포함)
|
||||||
if (split.hasHourlyRange()) {
|
if (split.hasHourlyRange()) {
|
||||||
DailyTrackCacheManager.DateRange hr = split.getHourlyRange();
|
DailyTrackCacheManager.DateRange hr = split.getHourlyRange();
|
||||||
Map<String, List<VesselTrack>> hourlyTracks =
|
Map<String, List<VesselTrack>> hourlyTracks =
|
||||||
@ -373,6 +373,19 @@ public class GisServiceV2 {
|
|||||||
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
|
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
|
||||||
log.info("[CACHE-MONITOR] queryWithCache L2 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
|
log.info("[CACHE-MONITOR] queryWithCache L2 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
|
||||||
hr.getStart(), hr.getEnd(), hourlyTracks.size(), filtered.size(), converted.size(), totalPts);
|
hr.getStart(), hr.getEnd(), hourlyTracks.size(), filtered.size(), converted.size(), totalPts);
|
||||||
|
|
||||||
|
// 캐시에 없는 MMSI → DB fallback
|
||||||
|
Set<String> missingMmsis = new HashSet<>(requestedMmsis);
|
||||||
|
missingMmsis.removeAll(filtered.keySet());
|
||||||
|
if (!missingMmsis.isEmpty()) {
|
||||||
|
VesselTracksRequest fallbackReq = VesselTracksRequest.builder()
|
||||||
|
.startTime(hr.getStart()).endTime(hr.getEnd())
|
||||||
|
.vessels(new ArrayList<>(missingMmsis)).build();
|
||||||
|
List<CompactVesselTrack> dbResult = gisService.getVesselTracks(fallbackReq);
|
||||||
|
allTracks.addAll(dbResult);
|
||||||
|
log.info("[CACHE-MONITOR] queryWithCache L2 PARTIAL → DB fallback: cacheHit={}, cacheMiss={}, dbTracks={}",
|
||||||
|
filtered.size(), missingMmsis.size(), dbResult.size());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
VesselTracksRequest hourlyReq = VesselTracksRequest.builder()
|
VesselTracksRequest hourlyReq = VesselTracksRequest.builder()
|
||||||
.startTime(hr.getStart()).endTime(hr.getEnd())
|
.startTime(hr.getStart()).endTime(hr.getEnd())
|
||||||
@ -384,7 +397,7 @@ public class GisServiceV2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3-b. 5min 범위 → L1 캐시 → DB fallback
|
// 3-b. 5min 범위 → L1 캐시 → DB fallback (누락 MMSI 부분 fallback 포함)
|
||||||
if (split.hasFiveMinRange()) {
|
if (split.hasFiveMinRange()) {
|
||||||
DailyTrackCacheManager.DateRange fr = split.getFiveMinRange();
|
DailyTrackCacheManager.DateRange fr = split.getFiveMinRange();
|
||||||
Map<String, List<VesselTrack>> fiveMinTracks =
|
Map<String, List<VesselTrack>> fiveMinTracks =
|
||||||
@ -397,6 +410,19 @@ public class GisServiceV2 {
|
|||||||
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
|
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
|
||||||
log.info("[CACHE-MONITOR] queryWithCache L1 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
|
log.info("[CACHE-MONITOR] queryWithCache L1 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
|
||||||
fr.getStart(), fr.getEnd(), fiveMinTracks.size(), filtered.size(), converted.size(), totalPts);
|
fr.getStart(), fr.getEnd(), fiveMinTracks.size(), filtered.size(), converted.size(), totalPts);
|
||||||
|
|
||||||
|
// 캐시에 없는 MMSI → DB fallback
|
||||||
|
Set<String> missingMmsis = new HashSet<>(requestedMmsis);
|
||||||
|
missingMmsis.removeAll(filtered.keySet());
|
||||||
|
if (!missingMmsis.isEmpty()) {
|
||||||
|
VesselTracksRequest fallbackReq = VesselTracksRequest.builder()
|
||||||
|
.startTime(fr.getStart()).endTime(fr.getEnd())
|
||||||
|
.vessels(new ArrayList<>(missingMmsis)).build();
|
||||||
|
List<CompactVesselTrack> dbResult = gisService.getVesselTracks(fallbackReq);
|
||||||
|
allTracks.addAll(dbResult);
|
||||||
|
log.info("[CACHE-MONITOR] queryWithCache L1 PARTIAL → DB fallback: cacheHit={}, cacheMiss={}, dbTracks={}",
|
||||||
|
filtered.size(), missingMmsis.size(), dbResult.size());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
VesselTracksRequest fiveMinReq = VesselTracksRequest.builder()
|
VesselTracksRequest fiveMinReq = VesselTracksRequest.builder()
|
||||||
.startTime(fr.getStart()).endTime(fr.getEnd())
|
.startTime(fr.getStart()).endTime(fr.getEnd())
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user