내가 2년차일때 수 억개의 레코드가 있는 테이블에서 유저의 유저 집단 내 성과를 백분위를 보여주는 분석 기능을 만들어야 했던 적이 있었음. (예를 들어서 a유저의 20대 남자 내 점수는 상위 10%)

매번 계산해서 보여주는 건 불가능 했고, 삽입/수정이 잦아서 인덱스를 걸기도 어려웠음. 그 정도로 중요한 기능은 아니었음.

나는 거기서 천만개 정도의 데이터를 무작위로 뽑아서 연령대와 성별별로 각 점수에 대한 평균과 표준편차를 구해서 역정규화한 테이블에 별도로 저장하는 방식을 사용함. 그리고 데이터가 부족해서 구하기 어려운 경우에는 다른 연령대와 성별에 저장된 통계를 참조해서 예측하는 방식으로 함.

지금 생각하면 유저에게 거짓데이터를 보여준거라서 안 좋은 방식으로 생각함.


지금 짠다면 nosql로 해당 테이블을 마이그레이션하고 람다 함수를 하나 만들고 nosql에 분석용 쿼리를 계속 날려서 역정규화된 테이블에 평균과 표준편차를 계속 업데이트를 해주는 방식을 써서 훨씬 정확한 데이터를 제공하는 구조를 짤 것 같다.


지금도 잘 아는건 아니라서 더 좋은 방식은 생각이 안남