위는 사용자 로그인 상태를 나타내는 사용자 컬렉션을 생성하기 위해 일부 데이터를 시뮬레이션합니다. 이제 2016-05-23의 신규 사용자 수를 쿼리하려고 합니다(사용자는 5-23에 로그인했지만 레코드에는 존재하지 않습니다). 5-23보다) ) 예를 들어 첫 번째 레코드 uid='1123'도 5-21에 로그인된 경우 uid='1123'은 5-23에 로그인한 사용자 수에 포함되지 않습니다
淡淡烟草味2017-05-02 09:21:34
5~23일에 로그인한 사용자는 5~23일 미만의 기록에 존재하지 않습니다
우선 이 디자인에는 명백한 결함이 있습니다.
실적 불량: 23일 미만의 기록이 너무 많습니다. 1년 전, 2년 전, 10년 전이 모두 5월 23일 미만인 경우, 얼마나 더 앞으로 스캔해야 합니까? 처음에는 데이터가 며칠만 있으면 괜찮지만, 로그 수가 늘어나면 프로그램이 점점 더 힘들게 실행됩니다. 그리고 그 과정은 빠르게 진행될 것입니다. 이때, 오래된 로그를 삭제하려고 생각하게 되는데, 다음과 같은 문제가 발생하게 됩니다.
유지관리 어려움: 로그인 로그는 용량이 크고 일반 사람들에게는 그다지 유용하지 않으며 영구적으로 보관하는 사람은 거의 없습니다. 1년 전의 로그를 삭제하면 첫 번째 로그인 로그가 귀하에 의해 삭제되었을 수 있으므로 새로운 신규 사용자 집단이 탄생할 수 있습니다.
그리고 일반적으로 신규 사용자를 신규 등록 사용자라고 하지 않나요? 이 알고리즘을 사용하여 신규 사용자를 찾아야 하는 특별한 이유가 있나요?
처음 로그인한 날을 신규 사용자 시간으로 계산해야 한다면 다시 디자인하는 것이 좋습니다. 예를 들어, 사용자 테이블을 기반으로 로그인하지 않은 사용자를 찾아 정기적으로 로그인 로그를 검색하면 해당 사용자 테이블에 첫 번째 로그인 날짜를 기록합니다. 이런 식으로 이론상으로는 아무리 시간이 걸려도 등록은 했지만 로그인을 하지 않은 사용자 수는 크게 변하지 않을 것입니다. 그러나 결국 소수입니다), 프로그램 성능은 시간이 지나도 저하되지 않습니다.
저는 귀하의 질문에 직접적으로 대답하지 않습니다. 왜냐하면 저의 평소 경험에 따르면 문제를 근본적으로 해결해야 하고 실수에 기초한 패치를 하면 상황이 점점 더 악화될 것이기 때문입니다.
PS: 마지막 문장의 논리에 문제가 있나요?