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
- Moins de requêtes
- Plus rapide
- Puissance de calcul
- Pagination
- Pas de filtrage sur les objets imbriqués
Plus
Moins
deck
By Jérémie Drouet
deck
- 999