2011-11-11 6 views
1

저는 서비스 네트워크를 구축하고 있으며 모든 서비스가 완전히 다릅니다. 이제는 사용자가 가장 많이 사용하는 서비스의 자동 목록을 작성하여 대시 보드를 만들어보다 쉽게 ​​작업 할 수 있도록했습니다. .서버를 날리지 않고 사용자에 대해 자세히 알아보십시오.

하지만 사용자가 가장 많이 사용하는 제품을 찾고 싶다면 서버에서 과중한 부담없이 어떻게해야합니까? 즉, 사용자가 해당 서비스 페이지 (예 : http://foo.com/bar/nyancattastic2.php)에 갈 때마다 (앱 이름) '막대'라는 키워드를 찾은 다음 사용자 이름이 '막대'와 일치하는 행을 업데이트하여 조회수를 추가합니다. '내 데이터베이스 안타 = 히트 + 1

비록 모든 페이지에 그것을두면 실제로 모든 페이지에서 업데이트 쿼리로 내 서버를 파괴합니다.

아이디어가 있으십니까? 또는, 내가 좋아하는 앱이 무엇인지 사용자에게 물어볼 수도 있지만 UX 질문이 더 많습니다.

도움을 주시면 큰 도움이됩니다.

건배, 카란

편집 * 내가 기대 트래픽의 수준이 제안 된 변경없이/초 약 3-10 쿼리합니다!

모든 답변 주셔서 감사합니다.

+0

나는 하나의 업데이트 문이 아마 생각하는 것 세계가 폭발하게 만들 것입니다. 서비스가 어떤 결과를 초래하더라도 이미 하나 이상의 업데이트를 수행하고 있습니다. –

+0

로드가 너무 높아서 트래픽이 너무 많아서 INSERT가 추가되어 서버가 작동하지 않습니까? 그리고 일시적으로 해낸다면? 그리고 무작위로 사용자를 샘플링한다면 어떨까요? –

답변

1

글쎄, 당신의로드에 따라, 초당 몇 가지 쿼리가있는 경우 업데이트 필드 = 필드 + 1 할 때 필드에 암시 적 잠금을 수행하기 때문에 문제가 될 수 있습니다.

트래픽이 많은 경우 로그 파일에 행을 작성하고 처리하거나, 주기적으로 집계되는 행을 mysql 테이블에 추가하는 방법을 고려해 볼 수 있습니다. 또 다른 아이디어는 웹 서버 로그를 분석하는 것입니다.

나는 개인적으로이 업데이트 필드 + 1에 물 렸는데, 막대한 양의 국가 축구 웹 사이트에서 사용하려고했을 때 문제가 될 수 있지만 높은 수준의 트래픽에서만 사용할 수 있습니다.

로드가 너무 높은 경우 사용자를 임의로 샘플링하는 Michael의 아이디어를 확인하십시오. 초당 3-5 개의 쿼리를 사용하면 걱정할 필요가 없습니다. 물론 서버에 따라 다르지만 초당 약 100 개의 쿼리가 발생합니다. 당신은 트래픽 부하 (내가 문제를 볼 때까지 내가 걱정되지 않을 것), 당신이 고려할 수 무작위로 샘플링 사용자에 대한 정말 우려되는 경우

+0

더 나은 방법은 documentload에서 쿼리를 실행하는 것입니다. 그것은 페이지를 잠그지 않고 페이지를 먼저로드하게하지만 그래도 필드를 잠그는 것이 좋습니다. \ 현재 트래픽 수준은 초당 약 3-10 개의 쿼리로 증가 할 것으로 예상됩니다. 한두 달 안에 20-30. 그 시점에 도달하면 로그 파싱을해야 할 것입니다. S 귀하의 대답과 비슷한 문제에 대한 경험에 감사드립니다! :) – Karan

+0

그렇습니다. AJAX를 사용하면 분명히 문제를 완화 할 수 있습니다. 로그 파일을 제외하고 그 지점에 도달하면 INSERT DELAYED (호출 당 한 행)와 함께 로깅을 위해 MySQL을 계속 사용할 수도 있습니다. 그런 다음 다른 테이블의 값을 압축하는 X 분마다 프로세스를 실행하십시오. 값 비싼 압축으로 DB를 잠그지 않으려면 시간당 Y 행의 압축을 제한 할 수 있습니다. – stivlo

1

직접 질문에 답변하지는 않지만 다른 각도에서 대답합니다.

Google Analytics를 사용하여 데이터를 추적 한 다음 analytics API를 사용하여 필요한 정보를 얻을 수 있습니다.

http://code.google.com/apis/analytics/docs/

+0

나는 그것에 대해 생각하고 있었지만, XML 데이터를 검사하는 것은 데이터의 실시간 업데이트보다 CRON 작업에 더 많은 것이 될 것이고, 좋은 생각이지만 약간의 비웃음이들 수도 있습니다. 아마 실패 할 것이다! 하하, 대답 해줘서 고마워! :) – Karan

+0

걱정하지 마십시오 @ 카란 흥미로운 프로젝트, 행운을 빕니다 .-) –

+0

건배, Alex : – Karan

1

당신이 거대한 트래픽 수준과 일정하게 높은 서버 부하를 처리하지 않는 한, 당신이 그런 작은 명령을 사용하여 서버를 지나친 과세에 대해 걱정을 너무 많이 필요가 있다고 생각하지 않습니다.

+0

+1이에요. MySQL에서 단일 항목을 업데이트하는 것은 매우 빠릅니다. 이 업데이트가 웹 서버에서 차단되지 않는 방식으로 수행되었는지 확인하십시오 (즉, 사용자에게 페이지를 제공하기 전에 MySQL 서버의 응답을 기다리지 않아도됩니다). –

+0

@TrevorBurnham 더 나은 방법은 문서로드시 Ajax를 사용하는 것입니다. 고마워요 : D – Karan

+0

@JHolyhead 제 서버는 매우 약하며 이미 초당 3-10 건의 예상 검색어를 추가합니다! D : 답해 주셔서 감사합니다 :) – Karan

2

:

// Check about 1/5 users: 
$random_thresh = 5; 

if (rand() % $random_thresh == 0) { 
    // Log an insert for this user: 
} 
+0

그가 가장 인기있는 서비스를 찾는 데에만 관심이 있고 정확한 숫자가 좋은 생각처럼 들리지 않으면 절대 숫자도 추정 할 수 있습니다 +1. – stivlo

+0

이것은 아주 똑똑한 해결책이지만 문제는 각 사용자에게 '가장 많이 사용되는 앱'을 제공하여 모든 사용자에 대해 알아야한다는 것입니다. 기대하는로드는 초당 3-10 개의 쿼리 사이입니다. 답장을 보내 주셔서 감사합니다. 앞으로는 측량에 확실히 사용할 것입니다. :) – Karan

관련 문제