데이터 종류
E
가치마인드 ERD | DrawSQL
Cache data? Redis?
- 데이터 종류
- 우리 서비스의 데이터 종류 중 caching할 데이터 종류
- 유저 인증 데이터 : JWT, socketId : userInfo 맵핑 테이블
- socketId & userInfo 매핑 테이블을 캐시db에 들고 있으면 유저 인증이 필요할 때마다 매번 token을 파싱하고, db를 조회하지 않아도 됨
- {socket.id : {userId, nickname, profile}} → 소켓 접속 종료시 삭제
- {tokenValue : userId} → 우리 서비스에서는 브라우저를 끌때 로그아웃 처리하는데, 로그아웃마다 cache data를 갱신?
- 게임 데이터 : 출제 키워드 & 게임 방 정보
- 출제 키워드
- {keyWordBank : [{keyword : “description”}, …]}
- 게임 진행될 때, random으로 뿌려줌 (게임 진행 중 중복은 방지해야 함)
- 고려사항 : nginx micro caching의 경우, 1초단위 캐싱인데, 우리 서비스에서 초단위로 api 콜 요청이 터질 것이라고 예상되지 않으므로 패스
- 동시간대 게임을 진행하고 있는 방의 개수*인원수에 따라서 동시처리해야 하는 트래픽량이 결정
- ex) 10개 방 * 6명 = 60개의 브라우저에서 키워드 데이터를 api로 동시 호출하는 상황을 가정했을 때, RDBMS보다는 cache 데이터를 사용하는 것이 서버를 더 적게 사용하는 방법임
- or 유저가 몰리는 시간대를 파악해 해당 시간에만 cache db를 돌리면..?? 의미 있나??
- 1초 단위 api 콜 요청이 오는 경우는 같은 방 내에서 게임을 플레이하는 최대 6개의 브라우저에서 동시 요청이 올 수 있을것 같고, 혹은 동시간에 우연히 문제 출제 타이밍이 겹치는 다른 방이 있을 경우, 가능할 것 같음. 출제 시간이 우연히 겹치는 경우의 트래픽은 예측이 어려움.
- 게임 방 정보
- Today Game Result : 0 ~ 24시까지 유저의 게임 내역을 기록하는 데이터
- 라운드별 게임 결과를 저장
- 라운드 누적 점수
- 풀어본 키워드 → 정답 오답 여부?
- 발표한 키워드 → 설명력 & 발표력 ?
- {userId : number, playRounds: number, totalScore: number, quizScore: number, speechScore: number, quizWords : [”keyword”, “”, …], speechWords: [”keyword”, “”, …]}
- Redis를 사용하고, redisJSON 모듈을 사용할 예정
- 근데, redis 말고 다른 cache db는 없음??
- 그리고, aws elastic cache + redis로? 아니면 그냥 redis cloud 사용하는 것이 좋을지??