2011-03-21 6 views
3

Stackoverflow는 사용자 이름 옆에 평판을 표시합니다. 나는 모든 페이지 렌더링에서 점수를 계산하기 위해 데이터베이스에 도달하지 않는다고 가정합니다 (또는 아마도 그렇습니까?). 누군가가 나를 슬프게 할 때 업데이트되는 총 점수 필드가 users 테이블에 있습니까?데이터베이스에서 채점 시스템을 어떻게 사전 계산합니까?

이러한 종류의 시스템에 가장 적합한 방법은 무엇입니까? 확실한 질문이라면 유감이지만 데이터베이스에 익숙하지 않습니다.

+0

+1. 오랫동안이 질문을 나 자신에게했다. – Arman

답변

0

로그인하면 모든 사용자 정보와 함께 데이터베이스에서 번호가 가져옵니다.

사용자 개체 일 수 있습니다. 해당 사용자 개체에는 로그인 할 때 데이터베이스에있는 숫자로 초기화되는 속성 점수가 있습니다.

웹 사이트를 돌아 다니면서 작업을 수행 할 때 속성은 업데이트되지만 데이터베이스는 업데이트되지 않습니다.

개체 사용자가 로그 아웃되거나 브라우저를 닫음으로써 파괴되거나 일정 시간이 지나면 데이터베이스를 한 번만 업데이트 할 수 있습니다.

+0

속성은 메모리 내 캐시에서 업데이트되고 지속 레이어 (이 경우 db)에 푸시되거나 대기됩니다. 사용자가 로그 아웃하거나 브라우저를 닫아 엔티티를 업데이트 할 수는 없습니다. – newbie

0

일반적인 질문에 대한 일반적인 대답은 다음과 같습니다. 캐싱! 캐싱에 대한 아이디어는 간단 할 수도 있지만 항상 올바르게 수행하는 것이 쉽지는 않습니다. 나는 그저 총 점수를 저장하지 않을 것이라고 생각합니다. 점수에 추가되는 모든 "이벤트"를 저장합니다. 총 점수는 이러한 "사건"에서 계산됩니다. 따라서 전체 점수에 이미 일종의 미리 계산되거나 캐시 된 값이 있습니다. 각 요청에 대해 데이터베이스를 히트하지 않으려면 메모리에 값을 캐시 할 수 있습니다. Memcached는 이러한 작업에 자주 사용되지만 물론 다른 옵션이 있습니다.

관련 문제