2010-12-12 3 views
1

나는 지난 한 해 동안 작업해온 웹 사이트에 대해 사용자 상/업적 시스템을 구현하는 중입니다. 기본 전제는 GameTrailers 또는 GiantBomb.com에서 찾을 수있는 것과 유사합니다. 사용자는 [x] 개의 댓글을 많이 달거나 [x] 개의 항목을 추가하는 것과 같은 일을 할 때 배지 (배지를 시각적으로 표현)를 얻습니다. 그들의 위시리스트 등등에.보상/성취 시스템에 대한 사용자 작업 추적

나는 이것을 구현하는 가장 효율적인 방법을 결정하려고 노력하고있다. 나는 조금 붙어있다. 현재 해결 방법은 다음과 같습니다.

  1. 데이터베이스에 각 업적을 만듭니다 (아무렇게나 적용됩니다). 업적에는 수용 여부를 결정하기 위해 동적으로 실행되는 카테고리, 수락 번호 및 SQL이 있습니다.
  2. 사용자가 업적을 산출 할 수있는 작업 (예 : 기사에 댓글을다는 등)을 수행 할 때마다 해당 문항에 적합한 업적을 결정하기 위해 SQL 문을 실행합니다 이미 완료 한 것).
  3. 해당 쿼리에서 반환 된 업적에서 나는 각각을 검토하고 수용 숫자가 충족되었는지를 확인하기 위해 동적 SQL을 실행합니다. 그렇다면 사용자는 업적을 완료했습니다.

2 단계와 3 단계는 사용자가 주석을 작성할 때마다 쿼리를 수행 할 때마다 내 관심사가됩니다.

위의 시나리오의 예는 다음과 같습니다 (이 코드는 완벽한 전체하지, 그냥 모의가 .. BTW, 사용자 ID는 사용자가 입력하지 뭔가 내가 검색 뭔가) :

achievements = From ach In searchCtx.Achievements 
       Where ach.CategoryID = achievementCategoryID And ach.IsActive = 1 
       Select ach 

For Each achmt As Achievement In achievements 
    Dim achieved As Boolean 
    Dim sqlToExecute As String = qst.SQLToRun 
    sqlToExecute = sqlToExecute.Replace("@USERID", "'" + userid.ToString + "'") 
    sqlToExecute = sqlToExecute.Replace("@TARGETVAL", achmt.AcceptanceNumber) 
    achieved = searchCtx.ExecuteQuery(Of Boolean)(sqlToExecute).First 

    If achieved Then 
     ' Add Conquest to User Achievemnets 
     Dim usrAhmt As New UserAchievement 
     usrAhmt .UserID = userid 
     usrAhmt .DateCompleted = DateTime.Now 
     usrAhmt .AchievementID = achmt .ID 
     searchCtx.UserAchievements.InsertOnSubmit(usrAhmt) 
    End If 

다음

SqlToExecute은 부울을 반환하는 함수를 호출, 뭔가 같은 :

select count(id) from comment where userid = @userID 

그래서 모든 말했다 데, 난이 작동합니다 생각하지만, 나는 퍼포에 대한 걱정 nce. 웹 프로그래밍에 너무 익숙하지 않지만 세션에서 UserStats 객체를 유지하고 작업하여 사용자가 업적을 완료하기에 충분한 댓글을 작성했는지 확인하는 것이 좋습니다. 이것은 동적이지는 않지만 SQL 서버에 대한 스트레스가 적습니다.

모든 의견을 보내 주시면 감사하겠습니다.

답변

0

얼마나 많은 사용자가 작업을 수행했는지에 따라 다릅니다. 하루에 10k 미만이라고 말하는 사람이 적다면 잘 지내십시오.

더 큰 경우 전략을 한 번만 수행하도록 변경할 수 있습니다. 따라서 모든 사용자가 작업을 수행 할 때마다이 함수를 호출하는 대신 활성화 된 모든 사용자에 대해 호출하십시오 한 번에 마지막 30 분. 한 번에 하나의 확인이 30 분 이상 걸리면 다음 질문이 시작되지 않을 수도 있습니다.

또는 cols 사용자 ID, 주석 수 등과 같은 메타 테이블에 정보를 저장하고 사용자 액션 (예 : 댓글 수 증가)과 관련하여 해당 테이블을 조작하고 모든 작업 후에 체크를 호출하십시오.

더 구체적인 답변을 보려면 몇 명의 사용자가 있는지 등의 데이터를 입력하십시오. 얼마나 많은 사용자가 활동 중입니까? 하루에 얼마나 많은 행동이 있습니까?최상의 수행 방법에 대한 질문은 유스 케이스의 통계에 크게 의존합니다.

관련 문제