ElasticsearchRepository를 사용하여 elasticsearch에 문서를 저장하는 속도를 측정해보았다.
테스트 케이스
1. save와 saveAll의 저장 속도 비교
- save로 저장하는 경우 단건을 하나씩 저장
- saveAll로 저장하는 경우 여러건을 bulk로 저장
2. 필드 유형 지정하지 않는 경우 저장 속도/크기 비교
- keyword, text, long 등 @Field를 지정하는 경우
- 필드유형을 지정하지 않는 경우 (text, keyword 둘다 생성)
3. nested 타입을 object 타입으로 변경
- nested 타입으로 저장되면 내부적으로 doc문서가 더 생긴다. (nested의 건수별로)
4. shard 개수에 따른 속도 비교 (shard=10)
- shard개수를 1개로 지정하는 경우와 10개로 지정하는 경우
5. 기존 문서를 수정하는 경우 (nested 사용)
- 문서를 생성한 다음 그 문서를 수정하는 경우 걸리는 시간 및 크기
6. 기존 문서를 수정하는 경우 (nested->object로 변경)
- 문서를 생성한 다음 그 문서를 수정하는 경우 걸리는 시간 및 크기
Document 정의
테스트를 위해 기본적인 elastic document를 아래와 같이 생성한다.
[userDoc]
- id (keyword, size=36)
- userId (keyword, size=10)
- name (keyword, size=10)
- age (long, size=2)
- address (text, size=30)
- devices (nested, count=3)
- userRole (nested, count=1)
- createdAt (long, size=14)
- description (text, size=60)
테스트 방법
- userDoc에 1000건을 동시에 입력하여 걸리는 시간을 측정한다.
- 사용된 API는 ElasticsearchRepository의 save와 saveAll 메소드를 이용하였다.
- shard 개수는 1개이다.
- elasticsearch 서버는 로컬에서 실행
테스트 진행
1. save와 saveAll의 저장 속도 비교
save를 사용
실행시간: 95초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 512k
saveAll을 사용
실행시간: 0.5초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 495k
2. 필드 유형 지정하지 않는 경우 저장 속도/크기 비교
save를 사용
실행시간: 90초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 817k
saveAll을 사용
실행시간: 0.5초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 741k
3. nested 타입을 object 타입으로 변경
save를 사용
실행시간: 89초
docs 개수: 1000개 (userDoc 문서)
파일 크기: 507k
saveAll을 사용
실행시간: 0.4초
docs 개수: 1000개 (userDoc 문서)
파일 크기: 428k
4. shard 개수에 따른 속도 비교 (shard=10)
save를 사용
실행시간: 93초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 984k
saveAll을 사용
실행시간: 0.6초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 588k
5. 문서를 수정하는 경우 (nested)
save를 사용
실행시간: 93초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 972k
saveAll을 사용
실행시간: 0.6초
docs 개수: 5000개 (userDoc + nested 문서 포함)
파일 크기: 494k
6. 문서를 수정하는 경우 (object)
save를 사용
실행시간: 112초 (수정시간만)
docs 개수: 1000개 (삭제 개수: 1000건)
파일 크기: 989k
saveAll을 사용
실행시간: 0.5초 (수정시간만)
docs 개수: 1000개 (삭제 개수: 1000건)
파일 크기: 858k
정리
테스트 케이스 | 저장방법 | 실행시간 | docs 개수/deleted 개수 | 파일크기 | refresh 수 | segment 수 |
---|---|---|---|---|---|---|
1. 기본 저장속도 | save savelAll |
95s 0.5s |
5000/0 5000/0 |
512k 495k |
1046(45s) 4(0.03s) |
10 1 |
2. 필드 유형 지정안함 | save savelAll |
90s 0.5s |
5000/0 5000/0 |
817k 741k |
1041(46s) 4(0.06s) |
10 1 |
3. object로 변경 | save savelAll |
89s 0.4s |
1000/0 1000/0 |
507k 428k |
1039(42s) 4(0.03s) |
10 1 |
4. shard 개수를 10으로 | save savelAll |
93s 0.6s |
5000/0 5000/0 |
1.03M 588k |
10074(43s) 40(0.7s) |
64 10 |
5. 문서 수정(nested) | save savelAll |
93s 0.5s |
5000/5000 5000/5000 |
1.5M->972k 494k |
2084(94s) 5(0.08s) |
11->2 2 |
6. 문서 수정(object) | save savelAll |
112s 0.5s |
1000/1000 1000/1000 |
1.12M->789k 858k |
2009(101s) 5(0.08s) |
11->2 2 |