2010-05-04 6 views
6

UPDATE: Ich habe gerade festgestellt, dass wir die Google Mini-Suche verwenden, um die Website zu crawlen, damit wir die Google-Suche unterstützen können. Dies schafft ein anonymes Profil für nicht nur jedes Crawl, sondern vielleicht sogar jede Seite - wäre das möglich?Millionen anonymer ASP.Net-Profile?

Hallo allerseits, einige Ratschläge benötigt!

Unsere Website erhält ungefähr 50.000 Zugriffe pro Tag, und wir verwenden anonyme ASP.Net-Mitgliedschaftsprofile/Benutzer, dies führt zu Millionen (derzeit 4,5 Mio.) "aktiver" Profile und die Datenbank ist "crawling", haben wir eine nächtliche Aufgabe, die alle inaktiven aufräumt.

Es gibt keine Möglichkeit, dass wir 4.5m einzigartige Besucher haben (unsere Kreisbevölkerung ist nur 1/2 Millionen), könnte dies durch Crawler und Spinnen verursacht werden?

Auch wenn wir mit dieser riesigen Anzahl von Profilen leben müssen, gibt es trotzdem Optimierung der DB?

Dank

Kev

+0

Welche Indizes haben Sie auf Ihre Tabellen zu haben? Verwenden Sie den Standardprofilanbieter? –

+0

@Daniel, ich habe keine zusätzlichen Indizes, nur die Vanille .Net-Mitgliedschaft eingerichtet. Wir verwenden einen benutzerdefinierten Profilanbieter. – Mantorok

+0

@Mantarok - hatte eine Idee, überprüfen Sie die aktualisierte Antwort. –

Antwort

2

-Update folgende Gespräch:

Darf ich vorschlagen, dass Sie einen Filter implementieren, die Crawler über Request-Header und die Protokollierung der Anon Cookie, die Sie später am selben Tag identifizieren. entschlüsseln und löschen Sie den Datensatz anon aspnet_profile und aspnet_users mit der zugehörigen UserId.

Sie könnten einen verlorenen Kampf kämpfen, aber zumindest bekommen Sie eine klare Vorstellung davon, woher der gesamte Verkehr kommt.


AnonymousId Cookies und, per Proxy, anonyme Profile sind für 90 Tage nach der letzten Verwendung gültig. Dies kann dazu führen, dass sich die Anon-Profile häufen.

Eine sehr einfache Möglichkeit, dies zu handhaben, ist ProfileManager zu verwenden.

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

löscht alle anonymen Profile, auf die in den letzten 7 Tagen nicht zugegriffen wurde.

Aber das lässt Sie mit den anonymen Datensätzen in aspnet_Users. Membership stellt keine ähnliche Methode wie ProfileManager zum Löschen von veralteten anonymen Benutzern zur Verfügung.

So ...

Die beste Wette ist eine rohe SQL-Angriff, Löschen von aspnet_Profile, wo Sie sie für veraltet halten, und führen Sie dann die gleiche Abfrage auf aspnet_User wo IsAnonymous = 1.

Viel Glück damit. Sobald Sie es aufgeräumt haben, bleiben Sie einfach oben drauf.


Aktualisiert Update:

Der folgende Code ist nur gültig auf IIS7, und wenn Sie alle Anfragen durch ASP.Net Kanal

Sie könnten ein Modul implementieren, die für Anforderungen an robots.txt Uhren und Holen Sie sich den anonymen ID-Cookie und speichern Sie ihn in einer Robots-Tabelle, mit der Sie Ihre Mitgliedschafts-/Profiltabellen von Robot Meta jede Nacht sicher löschen können. Dies könnte helfen.

Beispiel:

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)); 
      } 
     } 
    } 
} 

Referenz: http://www.codeproject.com/Articles/39026/Exploring-Web-config-system-web-httpModules.aspx


+0

Ich räume sie auf, aber ich benutze die voreingestellte inaktive Zeit, die ich glaube, ist ungefähr 60 Tage, ich kann das ziemlich leicht auf 7 ändern, aber der Website Manager würde lieber so lange wie möglich bleiben, weil es Anpassungen enthält zur Startseite. Also noch 60 Tage alte Profile aufräumen bleibt 4,5 Millionen ... – Mantorok

+0

@ Mantorok- Sie halten anonyme Anpassung für Benutzer, die Ihre Website seit 2 Monaten nicht besucht haben? das klingt nach Zurückhaltung der analen Art. Würdest du dich sogar daran erinnern, welche ästhetischen Veränderungen du an einer Seite, die du besucht hast, anonym vor zwei Monaten gemacht hast? sag nur .... ;-) –

+0

nein ich stimme dir vollkommen zu, ich wollte es eine Woche oder so, aber ich musste Bestellungen entgegennehmen. Ich muss vielleicht noch ein bisschen mit unserem Webmanager "chatten" :-) – Mantorok

1

Sie versuchen, in Ihrer Datei Global.asax.cs anonyme Profile im Session_End Ereignis zu löschen könnte.

Es besteht die Wahrscheinlichkeit, dass Ihre Website gecrawlt wird, entweder von einem seriösen Suchmaschinen-Crawler und/oder von einem illegalen Crawler, der nach Schwachstellen sucht, die es Hackern ermöglichen, die Kontrolle über Ihre Site/Ihren Server zu übernehmen. Sie sollten dies prüfen, unabhängig davon, welche Lösung Sie zum Entfernen alter Profile wählen.

Wenn Sie den Standardprofilanbieter verwenden, der alle Profilinformationen in einer einzigen Spalte enthält, sollten Sie this link lesen, das zu Scott Guthries Artikel über einen leistungsfähigeren tabellenbasierten Profilanbieter gehört.