[엘라스틱서치] 대량의 데이터를 response하기 원한다면, msearch - forewalk/elastic GitHub Wiki
Elasticsearch
search
버퍼가 큰 데이터를 받아야하는데, 한꺼번에 size를 늘려서 받게 되면 당연히 캐싱 속도가 문제가 된다. 물론 그 캐싱을 받아 줄 메모리도 필요하고.. 따라서 이제 생각할 수 있는게 질의하는 front(앞단, Client 뭐 무슨 표현이던 상관없다)에선 병렬처리(멀티쓰래드라 표현해도 상관없을 듯하다)로 처리하여 나눠서 질의할지를 고민하게 된다.
예를 들면, 10만개의 데이터 결과를 한꺼번에 다 받고 싶은데, size를 10만개로 하여 질의하면, 이게 캐싱에 의한 메모리도 문제, 따라서 속도도 문제라는 것이다. 그래서 앞에서 10만개를 만개씩 자를 수 있는 filter 나 다양한 조건으로 나눠서 질의해야 하나를 고민하지만,
결론부터 얘기하면 msearch를 이용하면, 단순 인덱스와 쿼리만 분리할 수 있는 것이 아니라, 위와 같은 대량의 데이터처리에도 아주 효과적이라는 것이다. msearch가 지금까지는 여러 인덱스나 완전하게 다른 query를 array로 분리하여 받을 수 있다고만 생각했는데,
ES 엔지니어에게 문의한 결과, 병렬처리라는 것이다. 그리고 실재로 took를 보아도 query 중, 가장 오래 걸린시간 = 총 시간이 된다.
메모리가 유효한 만큼 가능하겠지만, 어찌되었던 대량의 데이터를 가져오는데 큰 의미가 있다.