tails5555 / Our_Title_Academy_2018_Server

2018 우리들의 제목학원 - Back End[URL 리펙토링]
MIT License
2 stars 0 forks source link

Redis 정렬 문제 #1

Open tails5555 opened 5 years ago

tails5555 commented 5 years ago

Redis Cache 에 들어간 값을 가져와서 이 객체를 이용한 정렬 방법을 재구성 할 필요가 있습니다. 임시 방편으로 아래 stream() 메소드를 이용해서 정렬 작업을 진행하였는데 @Indexed 어노테이션만 있는 값만 정렬이 되는 걸까...? 그러면 이 어노테이션에 대해서 따져봐야 합니다. 아래의 세 가지 방안에 대해서는 구현이 끝나는 시점에서 알아보도록 합시다.

-> MySQL에서 Request 객체의 값을 가리키는 id의 값인 requestId를 중복 방지를 위하여 이 어노테이션으로 설정했는데 그렇지만 sequence 값(순위 시퀀스)을 또 Indexed 어노테이션을 추가할 수 있을까...?

-> 그러면 sequence 값을 Indexed 어노테이션으로만 잡은 경우에는 중복되는 requestId에 대해서 해결하는 방법이 어떻게 될까? 이 Redis Cache에서 일일히 existsById 질을 할 수 밖에 없는 것일까?

-> 마지막으로 굳이 Redis에 있는 값들을 가져와서 정렬 쿼리를 쏴주는 것보다 차라리 임시 방편처럼 작성하는 것이 오히려 나을 수도 있지 않을까?

-> 임시 방편

List<TodayRankDTO> currentRanking = todayRankService.findAll().stream()
                .sorted(Comparator.comparing(TodayRankDTO::getSequence))
                .collect(Collectors.toList());
J-minkuk commented 5 years ago

현재 시스템에서 아예 Redis의 ZSET 구조에 저장한 다음, 정렬되어 있는 걸 그대로 가져올 수는 없는건가 ??

tails5555 commented 5 years ago

시스템에서 ZSET 구조를 저장할 수 있는 방법이 있는데 Redis HashSet 로 말고 언급하신 방법으로 작성 해 보겠습니다. 그런데 정렬한다면 ZSET 를 이용하는 방법과 위에서 stream 을 이용한 정렬의 속도 차이는 별로 없을 것으로 추측을 합니다만, Redis 자체에서 정렬을 하고 가져오는 것이 프로젝트에서 더욱 향상할 수 있을 것 같네요. 의견 내 주셔서 감사드립니다!

J-minkuk commented 5 years ago

Thanks To에 이름 때려박아줘ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

tails5555 commented 5 years ago

이름 꼭 올려 드리겠습니다 😄 지금 일부 작업 중이라서 완성되는 데로 README.md 수정 할 때 작업할게요!