JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources

Performance on selecting all columns instead of specified attributes

Offen
#1,389 0 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Ruby
Sterne
2.3k
Forks
546
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Is there a reason the _model_class queries all columns?

https://github.com/cerebris/jsonapi-resources/blob/bf4b4cd7d79da453372880068e167066f0d05f47/lib/jsonapi/active_relation_resource.rb#L286-L288

This is a huge performance impact on models with many columns that may not ever be used by the resource.

It seems for performance reasons it makes sense to only select the attributes defined in the JSONAPI::Resource class.

A workaround for now is to override each resource using .select to retrieve only the fields that are specifically defined.

attributes :name, :address

def self.records(_options = {})
  super.select(self.fields)
end

This should also take into account sparse fieldsets parameters, which would further limit which columns are selected.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in lib/jsonapi/active_relation_resource.rb bei der verknüpften _model_class-Abfrage und verfolge, wie Resource-Attribute und sparse fieldsets dargestellt werden. Die Arbeit ist abgeschlossen, wenn diese Abfragen nur die vom resource und vom angeforderten fieldset benötigten Felder auswählen, dabei das bestehende records-Verhalten erhalten bleibt und die relevanten Abfragepfade abgedeckt sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rails, ruby
Bereich
backend-api-design, databases, performance
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.