2009-08-25 5 views
0

각 사용자의 구독 유형에 따라 사용자에게 알림을 보냅니다. 예를 들어구독 - 대량 콘텐츠 및 구독 금액을 처리하는 방법은 무엇입니까?

: 모든 가입 모든 코멘트

  • User C에 가입 한 모든 뉴스 기사
  • User B에 가입

    • User A 사이트에 새로운

    나는 스크립트를 스크립트를 실행하지 않는 한 5 분마다 다음을 수행하는 사람 :

    1. 알림을 보냅니다은 "내용"각 사용자의
    2. 을 가입 한 각 사용자를 가져, 마지막 실행 각 결과에 대한
    3. 이후 게시 (의견, 뉴스 기사 등) 새로운 "컨텐츠"를 받기

    나는 1,000 개의 새로운 "콘텐츠"가 있고 그 중 50 %를 구독하는 사용자는 내 스크립트를 끝내기까지 오래 걸리거나 서버가 다운됩니다.

    내가 알아 낸 점은 실행 당 100 개의 새로운 '콘텐츠'를 선택하고 사용자에게 알리는 것입니다. 나는 여전히 그것에 가입 할 수있는 사용자의 양에 문제가있다.

    내가 선택한 사용자의 양을 모든 사용자에게 도달 할 때까지 반복하는 것보다 100으로 제한 할 수 있다고 생각했습니다.

    이 방법이 맞습니까? 이 작업을 수행하는 더 쉬운 방법이 있습니까? 대규모 웹 사이트는 어떻게 사용자 알림을 처리합니까?

  • 답변

    1

    사용자 일괄 처리 (및 메일 보내기)가 가능하다는 것은 아키텍처 측면에서 볼 때 단일 프로세스/서버에 너무 많은 작업이 필요한 것처럼 유용 할 수 있습니다. 여러 개의 "작업"이 모두 자신의 일괄 처리에서 작동 할 수 있습니다. .

    그렇다면 스크립트를 실행하거나 서버를 중단하는 데 시간이 오래 걸릴지 모르겠다 고합니다. 나는 그것이 당신이 코드에서 작업하기 위해 문제라고 생각합니다. 당신이하고있는 코드와 db 쿼리를 프로파일 링하는 것은 필수입니다.

    일괄 처리 경로로 이동하면 어떤 사용자에게 발송되었는지 알림을 추적해야합니다. 나는 각 사용자 - 콘텐츠 쌍에 대한 행이있는 테이블을 유지하지 않을 것을 강력히 제안합니다. 사용자에게 전송 된 마지막 이벤트 (기사 또는 주석 게시 시간)의 시간 만 저장하면 여전히 보낼 필요가있는 내용을 쉽게 해결할 수 있으며 거대한 테이블로 끝나지는 않습니다.

    다시 반복하려면 코드 및 쿼리를 연구 과제로 프로파일 링하고 해당 경로를 통해 가장 효과적인 방법을 찾아 보시기 바랍니다.

    0

    데이터베이스 설정 방법에 대해 알지 못해도 대답하는 방법을 알기가 어렵습니다. 올바른 설정을 사용하면 새 콘텐츠에 대한 알림을 받아야하는 모든 사용자에게 제공되는 단일 쿼리를 작성할 수 있어야합니다. 같은

    뭔가 :

    SELECT u.user_email 
    FROM user_table AS u 
    LEFT JOIN subscription_table AS s 
    ON s.user_id = u.user_id 
    LEFT JOIN content_table AS c 
    ON c.content_type = s.content_type 
    WHERE c.add_time > LAST_RUN_TIME 
    

    잘하면 당신이 시작할 수 있습니다.