만약 DB에서 통계화 한거를
유저에게 보여줘야한다면,
중복 접속한 유저중 한명이
만약 유저가 어떠한 액션을 해서 통계화된 수치에 영향을 줄 경우
중복접속 포함 그 유저데이터를 프론트에 동기화를 해야하는상황
예 , 같은 아이디의 1유저 2유저가 있으면
1 유저의 행동으로 이미 데이터는 변동이 발생하였고 적용된 상황
하지만 2 유저는 어떠한 행동을 하지않고 초기접속시의 데이터만 가지고있는 상황
방법1. (예외처리 필요 )
웹소켓으로 행동에 대한 수치가 변동이있을경우 그 행동에 대한
변동치만 웹소켓으로 뿌려준다
이러면 1유저도 웹소켓으로인해 x2 될듯 ;
방법2. (무결성 보장)
Database에 월 일 통계로 각 유저마다 데이터를 저장하고
WeekResult 테이블 - Username , Data1_total ,Data2_total ,Data3_total
MonthReulst 테이블 - Username , Data1_total ,Data2_total ,Data3_total
유저의 액션이 있다면 DB는 어떠한 백엔드의 로직으로 자동적으로 + - 로 int형만 저장 후
웹소켓으로 모든 유저에게 고정적인 데이터를 뿌려줌
방법3. (씹 무결성 보장 , 과부하는 덤 )
위 방법필요없다 걍 씨발 유저가 세션이달라도 액션을 하기만하면 걍 ㅆㅃ group , join 집계 데이터 보내준다.
편차적이긴한데 대부분 집계 필요한 데이터가 한 유저당 평균적으로 200만 정도
현재 사용중인 방법은
2번 . 웹소켓으로 안뿌려주고 그냥 액션취할때만 데이터 보내줘서
프론트 세션에만 데이터가 입혀짐 ,
리펙토링 하는김에 수정좀 해볼려고하는데
더 좋은방법있음?
웹소켓으로 하시죠 - dc App
1번 아니면 2번인거같긴한데 아무레도 2번이 낫겟지 ?
참고로 innoDB 사용중... 메모리터진다
어떤 성격의 통계임? 그냥 무슨 데이터인지 적어주는게 판단하기 편하지않을까
일단 프로토콜이 담당하는 DB 테이블이 하나있음 이거는 쉽게 생각하면 그 프로토콜에 대해 반환값은 성공 , 실패 이거 두개밖에없음 구조상 테이블에 들어가는건 User , P_Data, AccessIP , Status 이렇게 4개있고 Status이 0 1 두개밖에없음 성공 실패 이걸 집계하는 테이블 구성이랄까
이걸 현재 status 0 1 에 따라 월 일 별 성공,실패 통계를 트리거로 설정하고있음. 지금은 단순하게 일 <-- 통계에 그냥 트리거 박고 월 지나면 일 통계를 모두합쳐서 <--이새끼를 모두 합쳐서 그대로 박아버리고있음. 만약 자세히 확인을하고싶다하면 프로토콜 에 대한 db 조회를 하고있음
실시간 + 무결성 다 중요한 통계성 데이터가 뭐가있을가 감이 안오긴하는데... 1. 최초 연결시 화면에 보여줄 모든 과거~현재 통계 데이터를 받아오고(매 번 join을 하던 결과를 캐싱하던 테이블을 따로 만들던 알아서) 2. 오늘 발생한 변경은 웹소켓으로 받아서 클라이언트에서 통계 처리(과거 데이터는 더이상 변하지 않으므로) 3. 주기적으로 동기화(30초~1분) 무결성이 중요하다면 1~2 사이에 추가된 데이터가 있는지 검증해야할거임
ㄳㄳㄳ
https://novelpie.org/mobile/
시바로마
니 허접한 걸로 고민하기에 내가 예시 적어줬잖아. 왜 욕해 ㅋㅋ