저희는 agent 를 통해 수집된 데이터를 mongoDB 에 일단 누적하고 꺼내는 방식을 사용하고 있는데... 이게.... 생각지도 못한 상황에 처하게 되네요.
https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/
이 내용을 보면 다음과 같은 문장이 있습니다.
"Pipeline stages have a limit of 100 megabytes of RAM."
우에.... 쿼리를 통해서 한번에 취급할 수 있는 데이터가 100M 으로 제한이 있군요. 이 이상은 allowDiskUse 를 쓰라고 하는데.. 이쯤되면 mongoDB 를 사용하는 장점이 적어지고 반드시 느려지게 되겠죠. 흠...
다른 화면은 이정도까지를 사용하는 일이 없고, dashboard 에서 이런걸 사용합니다만.. 300대의 데이터를 일주일치를 한번에 불러와서 처리하니깐.. 이거 만만치가 않네요...... 하긴.... 계산해보니까...
(((60초*60분*24시간)/30초)*300대)*7일 = 6048000 라인
................이야.... 600만 라인을 sort 를 걸면... 맛가는게 맞기는 하겠네요...(하하하)
일단은 3일로 거니까 어케든 query error 는 안납니다만... 반환해서 sort 까지 하려면 메모리가 터지는게 이해는 갑니다.(라지만.. 정확히는 pipeline 별로 tablespace 처럼 할당된 메모리 내에서의 문제인거곘지만요)
내부의 summery 에서 값을 얻어오는 방식을 좀 더 바꿔야할 필요가 있을듯 합니다. nosql db 가 버텨준다고 해도, 이대로면 고민은 확실하게 해봐야할 문제인거 같네요. 혹시 nosql 쓰시면서 메모리 터진일이 있으실까봐 참고하시라고 적어봅니다 :D
-------------------------------------
꼬리말
* 게시글 내용 삭제시 레벨 강등
* 질문은 각 주제별 게시판에.
비트코인 암호화화폐 커뮤니티 땡글~ 땡글~
-------------------------------------
아니면 MapReduce 쓰셔서 통계데이터 정제해서 가져오는것도 한 방법이긴 합니다.