안녕하세요 @realmankwon입니다.
스몬봇을 몽고DB 로 마이그레이션 중에 있습니다.
그런데 어느 순간부터 Deck를 내지도 못하고 또 지고 있군요...ㅜㅜ
원인을 찾아보니 배틀 데이터가 3천만건이 넘다보니 조회속도가 너무 느려져서 배틀 3분 내에 결과가 나오지 않아서였습니다.
스몬봇의 Deck 조회는 Find로 조회하는 것이 아니라 Aggregate를 사용하기 때문에 더 느린 것 같았습니다.
Find로 조회하면 lean()을 사용해 주면 속도가 빨라진다고 합니다.
빨라지는 이유는 Mongoose document 형식이 아닌 일반 javascript 객체로 리턴을 받기 때문이라고 합니다.
결과값은 json 형태가 아닌 string 이기에 JSON.parse()로 변환을 해주어야 합니다.
사용법은 간단합니다.
findOne(), findAll() 뒤에 lean()만 붙여주면됩니다.
const leanDoc = await MyModel.findOne().lean();
하지만 스몬봇은 Aggregate를 사용하였기 때문에 lean()을 사용할 수가 없었습니다.
이래저래 정보를 찾아보니 Index를 추가하는 것이 좋다고 합니다.
그래서 manacap, inactive, ruleset 으로 인덱스를 생성하였습니다.
그런데 속도는 빨라지지 않더군요.
더 검색을 해보니 Aggregate 의 경우는 복합 인덱스는 무시하고 단일 인덱스만 사용한다고 합니다.
생성한 인덱스는 삭제하고 manacap, inactive, ruleset으로 각각 인덱스를 생성하였습니다.
이렇게 몽고DB에 대해서 또 알아갑니다.