비효율적인 읽음 처리 개선하기

이전 코드

public void messageRead(Long roomId) {


        ChatRoomJpaEntity chatRoomJpaEntity = chatRoomJpaRepository.findById(roomId).orElseThrow(() -> new EntityNotFoundException("room not found"));
        Member member = memberRepository.findByEmail(SecurityContextHolder.getContext().getAuthentication().getName()).orElseThrow(() -> new EntityNotFoundException("member not found"));

        List<ReadState> readStates = readStateJpaRepository.findByChatRoomJpaEntityIdAndMember(roomId,member);


        for(ReadState readState : readStates){
            readState.updateReadState(true);
        }
    }

하나하나 update 코드가 날아간다 😂

@Modifying(clearAutomatically = true)
    @Query("UPDATE ReadState rs SET rs.isRead = true 
    WHERE rs.chatRoomJpaEntity.id = :roomId AND rs.member = :member 
    AND rs.isRead = false")
    int updateAllAsReadByRoomIdAndMember(@Param("roomId") Long roomId, @Param("member") Member member);

(로컬 환경에서 테스트했기에 정확하지 않을 수 있음)

약 메시지 880개를 읽는 경우를 테스트 했다.

1260/58 : 약 22배 정도의 성능 향상을 보였다.

Last updated