문제

웹 사이트를 구축하고 있습니다. 사용자가 가입 할 수있는 그룹이 있습니다.

이 "정상적인"그룹의 차이점은 회원 자격이 임시 - 사용자가 그룹에 참여하면 회원의 길이를 결정합니다 : 5 일, 주, 2 주 등 (선택 사항은 미리 정의됨). 또는 잠재적으로 모두 회원 자원은 일주일에 같은 길이로 설정 될 수 있습니다. 그것은 단순한 것을 만듭니다.

각 멤버의 수를 달리고 싶습니다. 그룹. 숫자는 마지막 초까지 정확하지 않아도됩니다. 그러나 너무 일 수는 없습니다 - 한 번만 업데이트해야합니다. 하루.

회원 수를 계산하는 "명백한"방법으로 보입니다. Cron 직업을 달리고, 매일 말하고, 모든 일원의 모든 구성원을 통과하십시오. 그룹 하나씩 그룹화하십시오. 회원 자격이 만료되면 해당 구성원을 제거하십시오 그룹의 회원 자격이 1로 그룹화하고 감소시킵니다.

그 접근법은 매우 비효율적이고 확장 성이 없어 보이지 않습니다. A.와 함께 많은 수의 그룹, 영원히 취할 수 있습니다.

이 작업을하는 더 좋은 방법을 생각해 볼 수 있습니까? 회원 자격은 수행합니다 최신 두 번째로 정확하지 않아도됩니다. 그것은 근사 할 수 있습니다 그리고 (약간) 날짜가 아닙니다. 또한 그것이 차이를 만드는 경우 회원 자원은 일주일에 같은 길이로 설정 될 수 있습니다.

도움이 되었습니까?

해결책

현재 각 그룹에있는 사람들이 얼마나 많은 사람들이 있는지 저장합니다.또한 일 목록을 저장하십시오.매일 매일 그룹 목록이 포함되며 그날 해당 그룹에서 해당 그룹에서 뺄 수있는 사람들이 포함됩니다.

사람이 그룹에 합류 할 때 그룹 전체에 1을 추가하고 그 / 그녀의 회원 자격이 만료 될 오늘 해당 그룹에 대한 사람 대 빼기에 1을 추가하십시오.

사람의 만료일이 변경되면 이전 만기일 (해당 그룹의 경우)에서 사람 대 빼기에서 1을 제거하고 새 만료일에 1을 추가하십시오.

마지막으로, 당일에 한 번 일단 각 그룹의 정확한 양을 뺍니다.

다른 팁

모든 구성원이 동일한 길이가되면 만료로 인해 멤버쉽의 FIFO를 유지하십시오.새 회원을 얻을 때마다 '만료'항목을 목록의 끝에 추가하십시오. 날짜가 1 주일에 설정됩니다.

이제는 원하는만큼 자주 멤버쉽 만료를 위해 목록 앞을 확인하고 그룹의 수를 업데이트합니다.아직 만료되지 않은 첫 번째 항목에 도달하면 중지하십시오.

이렇게하면 가변 길이 멤버쉽에서도 작동 할 수 있지만 정렬 된 목록을 유지해야합니다.

회원이 합류 할 때 회원 자격이 만료되는시기를 알고 있습니다.따라서 매일 (또는 경우에도) 비활성화하는 멤버 목록을 검색하는 대신 각 구성원을 동일한 날짜에 만료하는 멤버십 목록에 추가 할 수 있습니다.그런 다음 매일 당신이 그냥 겪고 만료 된 회원 자격을 삭제합니다.검색 대신 검색을 저장하는 대신 결과를 저장하는 것이 꽤 많이 있습니다.

스토리지의 크기는 가장 긴 회원의 길이에 비례합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top