2010-05-04 5 views
6

업데이트 : Google 검색을 지원하기 위해 Google Mini Search를 사용하여 웹 사이트를 크롤링하고 있음을 알게되었습니다. 이것은 각 크롤링뿐만 아니라 심지어 각 페이지에 대한 익명 프로필을 만드는 것일 수밖에 없습니까?익명 ASP.Net 프로필 수백만?

안녕하세요. 몇 가지 조언이 필요합니다.

우리 웹 사이트는 하루에 약 50,000 회의 조회수를 수신하며 익명의 ASP.Net 회원 프로필/사용자를 사용합니다. 이로 인해 현재 활성 프로필이 수백만 개 (4.5m)가되어 데이터베이스가 '크롤링'되고 있습니다. 모든 활동하지 않는 것을 정리하는 야간 작업.

우리는 고유 한 방문자가 4.5 백만 명에 불과하지만 (카운티 인구는 1/2 만), 크롤러와 거미가 원인 일 수 있습니까?

또한 우리가이 많은 수의 프로필을 가지고 살아야한다면 DB를 최적화 할 수 있습니까?

감사

케빈

+0

? 기본 프로필 공급자를 사용하고 있습니까? –

+0

@Daniel, 추가 색인이 없으며 바닐라 .Net 멤버쉽 설정 만 있습니다. 우리는 사용자 정의 프로파일 제공자를 사용하고 있습니다. – Mantorok

+0

@Mantarok - 아이디어가 있었는데, 업데이트 된 답변을 확인하십시오. –

답변

2

업데이트 :

난 당신이 요청 헤더를 통해 크롤러를 식별 할 수있는 필터를 구현하고, 곧 쿠키 당신이 할 수 나중에 같은 일을 기록하는 것이 좋습니다 수 있습니다. 해당 UserId와 함께 anon aspnet_profile 및 aspnet_users 레코드를 해독하고 삭제하십시오.

잃어버린 전투에 맞설 수도 있지만 적어도 모든 트래픽의 출처를 명확히 알 수 있습니다.


AnonymousId 쿠키 및 프록시 익명 프로필은 마지막 사용 후 90 일 동안 유효합니다. 이로 인해 anon 프로파일이 쌓일 수 있습니다.

매우 간단한 방법은 ProfileManager을 사용하는 것입니다.

ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7)); 

은 지난 7 일 동안 액세스되지 않은 모든 익명 프로필을 삭제합니다.

하지만 aspnet_Users에 익명 레코드가 남습니다. Membership은 부실 익명 사용자를 삭제하기 위해 ProfileManager과 유사한 방법을 노출하지 않습니다.

그래서 ...

가장 좋은 방법은 aspnet_Profile에서 aspnet_User에 대해 동일한 쿼리를 실행하고 부실하다고 생각하는 곳에서 원시 SQL 공격을 삭제하는 것입니다. 여기서 IsAnonymous = 1입니다.

행운을 빈다. 일단 당신이 그것을 정리하게되면, 그것의 꼭대기에 머물러 라.


업데이트 업데이트 :

아래 코드는 IIS7에 대해서만 유효합니다 그리고 당신은 ASP.Net 통해

을 모든 요청을 채널 당신은 robots.txt에 요청 시계 모듈을 구현할 수 있으며, 익명의 아이디 쿠키를 가져 와서 로봇 테이블에 숨겨두고 매일 밤 로봇 메타의 회원/프로필 테이블을 안전하게 제거하는 데 사용할 수 있습니다. 도움이 될 것입니다.

예 :

using System; 
using System.Diagnostics; 
using System.Web; 

namespace NoDomoArigatoMisterRoboto 
{ 
    public class RobotLoggerModule : IHttpModule 
    { 
     #region IHttpModule Members 

     public void Init(HttpApplication context) 
     { 
      context.PreSendRequestHeaders += PreSendRequestHeaders; 
     } 

     public void Dispose() 
     { 
      //noop 
     } 

     #endregion 

     private static void PreSendRequestHeaders(object sender, EventArgs e) 
     { 
      HttpRequest request = ((HttpApplication)sender).Request; 



      bool isRobot = 
       request.Url.GetLeftPart(UriPartial.Path).EndsWith("robots.txt", StringComparison.InvariantCultureIgnoreCase); 

      string anonymousId = request.AnonymousID; 

      if (anonymousId != null && isRobot) 
      { 
       // log this id for pruning later 
       Trace.WriteLine(string.Format("{0} is a robot.", anonymousId)); 
      } 
     } 
    } 
} 

참조 : http://www.codeproject.com/Articles/39026/Exploring-Web-config-system-web-httpModules.aspx 당신이 당신의 테이블이 무엇 인덱스


+0

나는 그들을 지우고 있지만 기본 비활성 시간을 사용하고 있는데 약 60 일이라고 생각합니다. 7로 변경할 수는 있지만 웹 사이트 관리자는 맞춤 설정이 포함되어 있기 때문에 오랫동안 가능한 한 오래 머무르게됩니다. 홈페이지로. 60 일 전의 프로필을 삭제해도 450 만 ... – Mantorok

+0

@ Mantorok- 2 개월 동안 사이트를 방문하지 않은 사용자의 익명 사용자 지정을 유지하고 있습니까? 항문 종류의 보유 같이 소리가 나는. 2 달 전에 익명으로 방문한 사이트에 어떤 미학적 변화가 있었는지 기억하십니까? 그냥 선생님 ....-)) –

+0

아니, 나는 너와 완전히 동의한다. 나는 일주일 정도 되길 원했지만 명령을 받아야했다. 나는 우리 웹 관리자와 약간의 '채팅'을해야 할 수도 있습니다 :-) 흥미로운 업데이트 인 – Mantorok

1

당신은 당신의 Global.asax.cs 파일에 Session_End 이벤트에서 익명의 프로필을 삭제 시도 할 수 있습니다.

합법적 인 검색 엔진 크롤러 및/또는 해커가 사이트/서버를 제어 할 수있는 취약점을 찾는 불법 크롤러에 의해 사이트가 크롤링 될 가능성이 있습니다. 오래된 프로파일을 제거하는 데 어떤 솔루션을 사용 하든지 관계없이이 문제를 조사해야합니다.

모든 프로필 정보를 단일 열에 유지하는 기본 프로필 공급자를 사용하는 경우 this link을 읽는 것이 좋을 수 있습니다.이 프로필은 Scott Guthrie의 기사에서 더 우수한 성능의 테이블 기반 프로필 공급자를 참조하십시오. 대화 다음