728x90
그런데? 인덱스를 밀어넣고 난 이후에도 데이터가 제대로 보이지 않는다는 것이었다.
흠. 이 부분에 대해서 킹치만 많은 가설을 통해 검증을 시작하면
========================================
ubuntu@ip-172-31-40-155:~$ curl -X GET "http://localhost:9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open moyamo_3 9bPawqGQTseRptxkTTsy-A 5 1 1576206 774 1.3gb 1.3gb
yellow open net.infobank.moyamo.models.photorecentwriter bYxm8ozGSzOmC8LpV59oWg 5 1 0 0 810b 810b
내가 예상한 데이터와 다르게 얼마 안들어갔다는 것이다?
| 항목 | 수치 |
| 기존 인덱싱 | 1,576,206 |
| 누락된 문서 | 14,759,000 |
이 부분을 계산해볼때 뭔가 이상한 느낌이 스물스물 나서 코드를 조사해봤는데
// SimdaSchedulerApplication.java:122
List<SimplePosting> postings = eventWorkRepositoryCustom.findPostingList(
Posting.class, sinceId, maxId, 1000 // ← 최대 1000개만 조회!
);
1000개씩만 드신다는 것이었다.
그래서 이걸 진짜로 9~10시간에 걸려서 삽질을 해야되냐? 댓츠논노
우리는 무적의 m5.xlarge를 사용하고 있기 때문에 더욱 공격적으로 병렬로 때려넣을 수 있다는 것이다.
#!/bin/bash
# Elasticsearch 병렬 인덱싱 스크립트
# 8개의 프로세스로 병렬 처리 - m5.xlarge (4 vCPU, 16GB) 최적화
# 예상 소요 시간: 약 1시간
SCHEDULER_URL="http://localhost:8088"
MAX_COMMENTS=200
# ID 범위를 n등분해서 처리
reindex_range() {
local START=$1
local END=$2
local WORKER=$3
local BATCH_SIZE=1000
local CURRENT=$START
local COUNT=0
echo "[Worker $WORKER] 시작: $START ~ $END"
while [ $CURRENT -le $END ]; do
local BATCH_END=$((CURRENT + BATCH_SIZE - 1))
if [ $BATCH_END -gt $END ]; then
BATCH_END=$END
fi
curl -s -X POST "$SCHEDULER_URL/indexing?sinceId=$CURRENT&maxId=$BATCH_END&max=$MAX_COMMENTS" --max-time 300 > /dev/null
CURRENT=$((BATCH_END + 1))
COUNT=$((COUNT + 1))
# 500 배치마다 진행상황 출력
if [ $((COUNT % 500)) -eq 0 ]; then
echo "[Worker $WORKER] 진행 중... $CURRENT / $END"
fi
done
echo "[Worker $WORKER] 완료!"
}
echo "========================================"
echo "병렬 인덱싱 시작 (8 workers)"
echo "서버: m5.xlarge (4 vCPU, 16GB RAM)"
echo "========================================"
START_TIME=$(date +%s)
# 8개의 범위로 나눠서 병렬 실행 (각 약 2백만 건)
reindex_range 114 2000000 1 &
reindex_range 2000001 4000000 2 &
reindex_range 4000001 6000000 3 &
reindex_range 6000001 8000000 4 &
reindex_range 8000001 10000000 5 &
reindex_range 10000001 12000000 6 &
reindex_range 12000001 14000000 7 &
reindex_range 14000001 16335566 8 &
# 모든 백그라운드 작업 완료 대기
wait
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
HOURS=$((DURATION / 3600))
MINUTES=$(( (DURATION % 3600) / 60 ))
SECS=$((DURATION % 60))
echo "========================================"
echo "전체 인덱싱 완료!"
echo "소요 시간: ${HOURS}시간 ${MINUTES}분 ${SECS}초"
echo "========================================"
# 최종 문서 수 확인
echo "인덱싱된 문서 수:"
curl -s "http://localhost:9200/moyamo_3/_count"
echo """
하지만 이렇게 처리한 이후에 CPU는 영 좋지못한 상황으로 가버리는데
ubuntu@ip-172-31-40-155:~$ chmod +x reindex-parallel.sh
ubuntu@ip-172-31-40-155:~$ ./reindex-parallel.sh
========================================
병렬 인덱싱 시작 (8 workers)
서버: m5.xlarge (4 vCPU, 16GB RAM)
========================================
[Worker 1] 시작: 114 ~ 2000000
[Worker 2] 시작: 2000001 ~ 4000000
[Worker 7] 시작: 12000001 ~ 14000000
[Worker 6] 시작: 10000001 ~ 12000000
[Worker 4] 시작: 6000001 ~ 8000000
[Worker 3] 시작: 4000001 ~ 6000000
[Worker 5] 시작: 8000001 ~ 10000000
[Worker 8] 시작: 14000001 ~ 16335566

괘..괜찮아.. 새벽에 돌리는 Scheduler니까 서비스는 영향받지 않는다굿!
'Java > Spring Boot JPA' 카테고리의 다른 글
| [Trouble Shooting] ElasticSearch Mapping Collision Issue (0) | 2026.03.30 |
|---|---|
| [FCM HTTP v1] Push Notification Payload 와 문제 해결 (1) | 2024.10.20 |
| [FCM HTTP v1] 400 Bad Request 와 문제 해결 (0) | 2024.10.06 |
| [CORS] setAllowdOrigins method and property (0) | 2024.08.28 |
| [Trouble Shooting] Hibernate: "Field 'id' doesn't have a default value" (1) | 2024.07.23 |
