Frage

Ich entwickle eine Statistik-Modul für meine Website, die mir Conversion-Raten messen helfen, und andere interessante Daten.

Der Mechanismus ich benutze, ist - ein Datenbankeintrag in einer Statistiktabelle zu speichern - jedes Mal, wenn ein Benutzer eine bestimmte Zone in meiner DB geht (ich vermeide doppelten Datensätze mit Hilfe von Cookies)

.

Zum Beispiel habe ich folgende Zonen:

  1. Website -. Eine allgemeine Zone verwendete einzelne Nutzer zu zählen, wie ich in letzter Zeit Google Analytics gestoppt vertrauensvollen
  2. Kategorie -. Selbsterklärend
  3. Minisite -. Selbsterklärend
  4. Produktbild - bei jedem Benutzer ein Produkt und die Führung Einreichungsformular sieht
  5. .

Problem nach einem Monat, so wird meine Statistiktabelle gepackt mit viel der Zeilen und die ASP.NET-Seiten schrieb ich die Datenlast zu analysieren wirklich langsam.

Ich dachte, das Schreiben vielleicht einen Dienst, der die Daten irgendwie analysieren, aber ich kann keine Möglichkeit sehen, das zu tun, ohne an Flexibilität zu verlieren.

Meine Fragen:

  1. Wie groß angelegte Datenanalyseanwendungen - wie Google Analytics laden so schnell die Daten
  2. ?
  3. Was ist der beste Weg für mich, es zu tun?
  4. Vielleicht mein DB-Design ist falsch und ich soll nur eine Tabelle in die Daten speichern?

Danke für jeden, der hilft,

Eytan.

War es hilfreich?

Lösung

Der grundlegende Ansatz für Sie suchen heißt Aggregation .

Sie interessieren sich für bestimmte Funktion über Ihre Daten berechnet und anstatt die Daten „online“ berechnet wird, wenn die Anzeige der Homepage gestartet wird, berechnen Sie sie offline, entweder über einen Batch-Prozess in der Nacht oder inkrementell, wenn der Protokolldatensatz geschrieben .

Eine einfache Verbesserung wäre Zählungen zu speichern pro Benutzer / Session, anstatt jeden Treffer zu speichern und zu zählen sie. Das würde Ihre analytischen Verarbeitungsanforderungen um einen Faktor in der Reihenfolge des Treffers pro Sitzung reduzieren. Natürlich wäre es die Verarbeitungskosten erhöhen, wenn Protokolleinträge einfügen.

Eine andere Art der Aggregation wird Online Analytical Processing , die nur entlang einiger Dimensionen Aggregate Ihre Daten und ermöglicht den Benutzern die anderen Dimensionen in einem Browsing-Modus aggregieren. Diese Trades aus Leistung, Speicherkapazität und Flexibilität.

Andere Tipps

Es scheint, wie Sie mit Hilfe von zwei Datenbanken gut tun könnten. Eine davon ist für die Transaktionsdaten und es kümmert sich um alle der INSERT-Anweisungen. Der andere ist für die Berichterstattung und kümmert sich um alle Ihre Abfrageanforderungen.

Sie können Index den Rotz aus der Berichtsdatenbank und / oder die Daten denormalize so weniger sind in den Abfragen verwendet Joins. In regelmäßigen Abständen Daten exportieren aus der Transaktionsdatenbank zur Berichtsdatenbank. Dieser Akt wird die Berichterstattung Reaktionszeit zusammen mit den Aggregations Ideen bereits erwähnt verbessern.

Ein weiterer Trick ist zu wissen, Partitionierung . Sehen Sie, wie das in der Datenbank Ihrer Wahl getan - aber im Grunde die Idee ist, dass Sie Ihre Datenbank erzählen eine Tabelle in mehrere Untertabellen aufgeteilt zu halten, die jeweils mit einer identischen Definition, basierend auf einem gewissen Wert.

In Ihrem Fall, was ist sehr nützlich ist „Bereichspartitionierung“ - die Partition auf einem Bereich basiert die Wahl, in die ein Wert in fällt. Wenn Sie mit dem Datumsbereich partitionieren, können Sie separate Untertabellen erstellen für jede Woche (oder jeden Tag, oder jeden Monat - hängt davon ab, wie Sie Ihre Daten verwenden und wie viel davon ist).

Das bedeutet, dass, wenn Sie einen Datumsbereich angeben, wenn Sie eine Abfrage, die Daten ausgeben, die außerhalb dieses Bereichs ist nicht einmal in Betracht gezogen werden; das kann zu sehr erhebliche Zeiteinsparungen führt, sogar besser als ein Index (ein Index jede Zeile zu prüfen hat, so wird es mit Ihren Daten wachsen, eine Partition ist ein pro Tag)

.

Das macht die beiden Online-Abfragen (diejenigen ausgegeben, wenn Sie Ihre ASP-Seite getroffen), und die Aggregationsanfragen Sie notwendige Statistiken, viel schneller im Voraus berechnen verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top