Ich erstelle mehrere Berichte in einer Anwendung und bin dabei auf einige Möglichkeiten zur Erstellung der Berichte gestoßen. Ich möchte Sie auf die besten / gebräuchlichsten Wege zum Erstellen von Berichten aufmerksam machen, die sowohl skalierbar als auch in Echtzeit sind.
Zuerst einige Bedingungen / Grenzen / Ziele:
Project
, und das Projekt dauerte 6 Monate, hatte eine Menge Aktivitäten, aber jetzt ist es vorbei), sollte der Bericht dauerhaft gespeichert werden so ziehen nachfolgende Retrievals einfach ein vorberechnetes Dokument. Die Berichte müssen nicht durchsuchbar sein. Sobald die Daten in einem Dokument sind, zeigen wir nur das Dokument an. Der Client erhält grundsätzlich einen JSON-Baum, der alle Statistiken, Diagramme usw. darstellt, so dass er in Javascript gerendert werden kann.
Meine Frage stellt sich, weil ich versuche, einen Weg zu finden, in Echtzeit über riesige Datensätze zu berichten .
Sagen Sie, dass ich über die allgemeine Benutzeranmeldung und die Aktivität auf einer Website berichte. Die Website hat 1 Million Benutzer und es gibt durchschnittlich 1000 Seitenaufrufe pro Sekunde. Es gibt ein User
Modell und ein PageView
Modell, sagen wir, wo User has_many :page_views
. Sagen wir, ich habe folgende Werte:
Dinge, die ich versucht habe:
User
und PageView
beide ActiveRecord-Objekte sind, also alles über SQL. Ich schnappe alle Benutzer in Chunks so etwas:
%Vor%MongoMapper::Document
objects Map-reduce ist vor Ort sehr langsam zu berechnen, und ich habe noch nicht die Zeit dafür aufgewendet, um herauszufinden, wie diese Arbeit in Echtzeit funktioniert (check out Kolibri ). Grundsätzlich mache ich das gleiche: Zerkleinere die Datensätze, füge das Ergebnis zu einem Hash hinzu und das ist es.
Dies ist der Ansatz, den das Statistik-Juwel von Rails annimmt. Das Einzige, was ich nicht mag, ist die Menge an Abfragen, die dies möglicherweise machen könnte (ich habe nicht bewertet, ob 30 Abfragen pro Anfrage pro Bericht besser sind, als alle Objekte in den Speicher zu schreiben und in reinem Ruby zu sortieren)
Die Frage, die ich vermute, ist, was ist der beste Weg aus Ihrer Erfahrung, Echtzeitberichte über große Datensätze zu erstellen? Mit Chunking / Sortierung der Datensätze im Speicher jeder Anfrage (was ich gerade mache, was ich mit Stundy-Cron etwas optimieren kann, aber es ist nicht Echtzeit), brauchen die Berichte etwa eine Sekunde, um zu generieren (komplexe Datumsformeln und so), manchmal länger.
Neben den traditionellen Optimierungen (bessere Implementierung von Daten, sql / nosql Best Practices), wo finde ich einige praktische und praxiserprobte Artikel zum Erstellen von Berichten? Ich kann Berichte erstellen kein Problem, das Problem ist, wie machen Sie es schnell, in Echtzeit, optimiert und richtig ? Habe nichts wirklich gefunden.
Tags und Links ruby-on-rails