Boostez les performances de loopback avec Postgresql

Petit projet de démo

Brand

Model

Revision

{
    "include": [
        {
            "relation":"model",
            "scope": {
                "include": [
                    {
                        "relation":"brand"
                    }
                ]
            }
        }
    ]
}
// Récupère les "revisions"
SELECT "startyear","endyear","id","modelid"
FROM "public"."revision"
ORDER BY "id;

// Récupère les "models"
SELECT "name","id","brandid"
FROM "public"."brandmodel"
WHERE "id" IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35 ,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45)
ORDER BY "id";

// Récupère les "brands"
SELECT "name","logo","id"
FROM "public"."brand"
WHERE "id" IN ($1,$2,$3)
ORDER BY "id";
Percentage of the requests served within a certain time (ms)
  50%    645
  66%    665
  75%    679
  80%    689
  90%    723
  95%    753
  98%    776
  99%    812
 100%    991 (longest request)

Amélioration

{
  "startYear": 2016,
  "model": {
    "id": 1,
    "brandid": 1,
    "name": "1000 RSV4 R-FW",
    "brand": {
      "id": 1,
      "name": "Aprilia",
      "logo": "Aprilia-vector-logo.png"
    }
  },
  "categories": [
    {
      "id": 1,
      "name": "Sport"
    }
  ],
  "id": 1
}

Vue SQL

Modèle loopback

{                                                                                                                                                                                                                                               "name": "RevisionView",                                                                                                                                                                                                                       "plural": "revision-views",                                                                                                                                                                                                                 
  "base": "PersistedModel",                                                                                                                                                                                                                   
  "options": {                                                                                                                                                                                                                                    "validateUpsert": true,                                                                                                                                                                                                                   
    "postgresql": {                                                                                                                                                                                                                           
      "table": "revision_view"                                                                                                                                                                                                                
    }                                                                                                                                                                                                                                         
  },                                                                                                                                                                                                                                          
  "properties": {                                                                                                                                                                                                                             
    "startYear": "number",                                                                                                                                                                                                                    
    "model": "object",                                                                                                                                                                                                                          
    "categories": "object"                                                                                                                                                                                                                      
  },                                                                                                                                                                                                                                          
  "validations": [],                                                                                                                                                                                                                          
  "relations": {},                                                                                                                                                                                                                            
  "acls": [],                                                                                                                                                                                                                                 
  "methods": {}                                                                                                                                                                                                                               
}
SELECT "startyear","model","categories","id"
FROM "public"."revision_view"
ORDER BY "id";
Percentage of the requests served within a certain time (ms)
  50%    317
  66%    326
  75%    333
  80%    340
  90%    353
  95%    375
  98%    406
  99%    424
 100%    543 (longest request)

Pros & Cons

  1. Moins de requêtes
  2. Plus rapide
  3. Puissance de calcul
  4. Pagination
  1. Pas de filtrage sur les objets imbriqués

Plus

Moins

deck

By Jérémie Drouet

deck

  • 999