Welche Arten von DBs berechnen Statistiken pro Minute?

8

Ich habe eine Use Case-Anforderung, wo ich ein Hashtag-Ranking-System entwerfen möchte. 10 beliebtesten Hashtag sollte ausgewählt werden. Meine Idee ist ungefähr so:

[hashtag, rateofhitsperminute, rateofhisper5minutes]

Dann werde ich fragen, finden Sie die 10 beliebtesten #hashtags, deren Rateofhits pro Minute am höchsten sind.

Meine Frage ist, welche Art von Datenbanken kann ich verwenden, um mir Statistiken wie "rateofhitsperminute" zur Verfügung zu stellen?

Was ist eine gute Möglichkeit, ein solches Detail zu berechnen und in db zu speichern? Bieten einige DBs diese Funktionen?

    
JavaDeveloper 16.06.2016, 03:31
quelle

4 Antworten

4

Zunächst wird "Trefferrate pro Minute" berechnet:

%Vor%

Also hängt die Rate davon ab, wie lange der Zeitraum ist. (Die letzte Minute? Die letzten 10 Minuten? Seit die Hits begonnen wurden aufgezeichnet? Da wurde der Hashtag zuerst verwendet?)

Was Sie also wirklich speichern möchten, ist die Anzahl der Treffer, nicht die Rate. Es ist besser, entweder:

  • Speichern Sie die Hashtags und ihre Trefferzahlen während eines bestimmten Zeitraums (weniger Arbeitsspeicher / CPU erforderlich, aber weniger flexibel)
  • ODER Zeitstempel und Hashtag jedes Treffers (mehr Speicher / CPU erforderlich, aber flexibler)

Nun müssen Sie den gewünschten Zeitraum auswählen und die Datenbank abfragen, um die Top 10 Hashtags mit den meisten Treffern in diesem Zeitraum zu finden.

Wenn Sie die Rate anzeigen möchten, verwenden Sie die obige Formel, beachten Sie jedoch, dass die Reihenfolge der obersten Hashtags nicht geändert wird, da die Periode für jedes Hashtag identisch ist.

Sie können den obigen Algorithmus auf fast jeden DB anwenden. Sie können es sogar tun, ohne eine Datenbank zu benutzen (benutzen Sie einfach eine eingebaute Programmiersprache hashmap).

Wenn Leistung ein Problem ist und es viele verschiedene Hashtags geben wird, schlage ich vor, eine OLAP-Datenbank zu verwenden. OLAP-Datenbanken sind speziell für Top-k-Abfragen (über einen bestimmten Zeitraum) konzipiert.

Nachdem dies gesagt wurde, hier ein Beispiel, wie Sie Ihren Anwendungsfall in Solr erreichen können: Solr als Analytics-Plattform . Solr ist keine OLAP-Datenbank, aber dieses Beispiel verwendet Solr wie eine OLAP-DB und scheint am einfachsten zu implementieren und an Ihren Anwendungsfall anzupassen:

Ihr Solr-Schema würde wie folgt aussehen:

%Vor%

Ein Beispieldokument wäre:

%Vor%

Eine Abfrage, die Sie verwenden könnten, wäre:

%Vor%

Zum Schluss noch ein paar fortgeschrittene Ressourcen zu dieser Frage:

Leftium 24.06.2016, 08:59
quelle
3

Keine Datenbank hat Statistiken pro Minute, aber jede moderne Datenbank könnte verwendet werden, um eine Datenbank zu erstellen, in der Sie ganz einfach Raten pro Minute oder andere berechnete Werte berechnen können.

Ihre Frage ist wie die Frage, welche Art von Auto von New York nach LA fahren kann - na ja, kein Auto kann selbst fahren oder sich selbst betanken (ich sollte vorsichtig mit dieser Analogie sein, denn ich denke Autos machen das fast schon! ), aber du könntest jedes Auto, das du magst, von New York nach LA fahren, einige werden komfortabler sein, einige sparsamer und einige schneller als andere, aber du musst fahren und tanken.

    
SeanN 18.06.2016 04:53
quelle
3

Sie können InfluxDB verwenden. Es ist gut für Ihren Anwendungsfall geeignet, da es erstellt wurde, um Zeitreihendaten zu verarbeiten (zum Beispiel "Treffer pro Minute").

In Ihrem Fall könnten Sie bei jedem Treffer einen Datensatz mit dem Namen des Hashtags und einem Zeitstempel senden.

Die Daten sind abfragbar, und es gibt bereits Tools, mit denen Sie sie verarbeiten oder visualisieren können (wie zB Grafana ). .

    
pablochan 24.06.2016 22:05
quelle
1

Wenn Sie mit einem großen Datensatz zufrieden sind, können Sie diese Informationen selbst speichern und berechnen.

Ich glaube, Mongo ist ziemlich schnell, wenn es um indexbasierte Abfragen geht, damit Sie so etwas strukturieren können.

Jedes Mal, wenn ein Tag "getroffen" oder zugegriffen wird, können Sie diese Informationen als Zeile speichern

%Vor%

Wenn Sie es auf diese Weise speichern, können Sie zunächst einfache Gruppen-, Zähl- und Sortieroperationen ausführen, die Sie zu Ihrer ersten gewünschten Fähigkeit führen, die 10 beliebtesten Tags zu berechnen.

Mit den Informationen in diesem Format können Sie dann weitere Abfragen basierend auf Tag und Zeitstempel ausführen, um die Anzahl der Treffer für ein bestimmtes Tag zwischen den Zeiten X und Y zu zählen, die Ihnen Ihre Treffer pro Periode geben würden.

Vorteile, es auf diese Weise zu tun:

  • Hohe Informationsgranularität abhängig von Zeitrahmen, die über die Abfrage
  • bereitgestellt werden
  • Diese Abfragen sind ziemlich schnell in mongoDB oder ähnlichen Datenbanken, selbst bei großen Datenmengen

Negativ, es so zu machen:

  • Sie müssen viele Datenzeilen speichern
  • Sie müssen Abfragen ausführen, um die benötigten Informationen abzurufen, anstatt eine einzelne Datenzeile zurückzugeben
Aidan 25.06.2016 02:10
quelle

Tags und Links