ElasticSearch: 1 index 여러 type vs. 여러 index에 각 type
각각의 index에 각각의 type을 저장:
인덱스 내에서 검색이 효과적이고 빠릅니다. 데이터량은 각 샤드 내에서 작아야 합니다. 2개 이상의 인덱스의 데이터를 조합해서 검색하는 것은 오버헤드가 있습니다. 쿼리가 각 인덱스의 샤드들로 보내지고, 다시 결과를 합쳐서 사용자에게 보내야 하기 때문입니다.
만약 데이터셋이 작다면 이 방식은 추천하지 않습니다. 미미한 성능 향상을 위해 추가적인 샤드와 더 많은 스토리지가 필요해지기 때문입니다. 반대로 데이터셋이 크고 쿼리가 오래 걸린다면 추천합니다. 독점적인 샤드가 specific 데이터들을 저장하게 되고, 그 덕분에 ES가 처리하기 쉬워지기 때문입니다.
1개의 index에 여러 type으로 저장:
1개의 인덱스 안에 있는 5개의 샤드(디폴트) 에 더 많은 데이터가 저장됩니다. 이것은 다른 type 을 조합하는 쿼리를 날릴 때 오버헤드가 적다는 것을 의미합니다. 하지만 샤드 크기가 상당히 커집니다. 샤드가 커진다는 것은 ES가 검색하는 데 더 오래 걸린다는 의미입니다. 필터를 해야 하는 문서가 더 많기 때문입니다.
만약 1TB 데이터로 성장할 거라면 추천하지 않습니다. 다른 인덱스 또는 여러 샤드에 데이터를 분산하지 않을 거면 역시 추천하지 않습니다. 반대로 데이터가 작다면 추천합니다. 미미한 성능 향상을 위해 스토리지를 낭비하지 않을 것이기 때문입니다.