fix: V2 캐시 조회 시 누락 MMSI DB fallback 추가 #49
@ -360,7 +360,7 @@ public class GisServiceV2 {
|
||||
}
|
||||
}
|
||||
|
||||
// 3-a. hourly 범위 → L2 캐시 → DB fallback
|
||||
// 3-a. hourly 범위 → L2 캐시 → DB fallback (누락 MMSI 부분 fallback 포함)
|
||||
if (split.hasHourlyRange()) {
|
||||
DailyTrackCacheManager.DateRange hr = split.getHourlyRange();
|
||||
Map<String, List<VesselTrack>> hourlyTracks =
|
||||
@ -373,6 +373,19 @@ public class GisServiceV2 {
|
||||
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
|
||||
log.info("[CACHE-MONITOR] queryWithCache L2 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
|
||||
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 {
|
||||
VesselTracksRequest hourlyReq = VesselTracksRequest.builder()
|
||||
.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()) {
|
||||
DailyTrackCacheManager.DateRange fr = split.getFiveMinRange();
|
||||
Map<String, List<VesselTrack>> fiveMinTracks =
|
||||
@ -397,6 +410,19 @@ public class GisServiceV2 {
|
||||
int totalPts = converted.stream().mapToInt(CompactVesselTrack::getPointCount).sum();
|
||||
log.info("[CACHE-MONITOR] queryWithCache L1 HIT [{}, {}): cacheVessels={}, filteredVessels={}, compactTracks={}, points={}",
|
||||
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 {
|
||||
VesselTracksRequest fiveMinReq = VesselTracksRequest.builder()
|
||||
.startTime(fr.getStart()).endTime(fr.getEnd())
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user