2016-08-07 1 views
2

Ich habe eine einfache Frage zu meiner Rails App.Rails 4: Wie man komplexe DB-Abfragen in einer Controller-Aktion behandelt, um Dinge für den Benutzer zu beschleunigen

Ich habe eine Reihe von Controller-Methoden, die einige umfangreiche Datenbankabfragen enthalten. Dies verlangsamt die Darstellung der relevanten Ansichten. Ein Beispiel ist:

@user_json = User.all.reject{|u| !u.valid? }.group_by(&:iso).map{|k,v| [k, v.count, k.to_s.downcase]}.map {|c, v | ["code" => c, "value" => v, "flag" => c.to_s.downcase]}.flatten.to_json 

Das erstellt JSON für ein Highcharts-Diagramm. Ich habe mehrere davon in jeder Aktion. Wie wird das am besten gehandhabt?

  1. Push zu einem Hintergrundjob? Wenn ja, welcher. Ich benutze Sidekiq bereits, aber dies erlaubt mir nicht den Zugriff auf in Arbeitern erstellte Variablen.

  2. einfach versuchen, die Abfrage durch DB-Optimierung zu beschleunigen usw.

Meine DB ist nicht so groß (etwa 4000 Nutzer).

+0

Das erste, was verbessern holen, können Sie die Berechnung beschleunigen Sie dort haben, indem sie von sich bewegenden Speicher zu SQL. Dann wahrscheinlich eine Indexüberprüfung. Jetzt, wenn Sie abfragen, um Daten in einer Ansicht anzuzeigen, dann Hintergrundjob nicht Ihr Werkzeug. –

+1

Wie 'User.all.reject {| u | ! u.valid? } 'kann geschrieben werden wie' User.where.not (valid: true)} .. ' –

Antwort

-1

Ich schlage vor, Sie diese

OPTION (RECOMPILE) auf dem SQL hinzuzufügen // dies wird die Geschwindigkeit Ihrer

Verwandte Themen