Prepis bulkUpdate/bulkUpsert interne používajúcich array.map + upsert
Jako developer chci optimalizovat dotazy do DB, aby byl kod rychlejsi
Výstup z analýzy TCP - Analýza výpočtu update delay (#293 - closed)
Akceptační kritéria
- nahrazeni map -> upsert za bulkCreate on conflict (trips i positions)
- týká se metod bulkUpsert a bulkUpdate v trip repozitáři (zůstane jen jedna), a bulkUpdate v position repozitáři
- nahrazeni redis get gtfsTripDelayComputation per key batchom v updateDelay flow
Implementační poznámky
- akceptuje senior vyvojar, případně dodatečná kontrola někým za ROPID
- konzultace @danknotek
- Dokumentace SequelizeModel.bulkCreate https://sequelize.org/api/v6/class/src/model.js~model#static-method-bulkCreate
- Příklad užití bulkCreate + updateOnDuplicate v descriptor repozitáři https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/vehicle-positions/workers/vehicle-descriptors/data-access/DescriptorRepository.ts?ref_type=heads#L30
- Vytypovaná místa k přepisu
-
saveDataToDB- volá se tripRepo.bulkUpsert nad transformovanými HTTP daty https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/SaveDataToDBTask.ts?ref_type=heads#L24 -
updateGTFSTripId- volá se positionRepo.save, který ale interně volá map + upsert. Tohle chceme určitě rovněž přepsat na SequelizeModel.bulkCreate https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateGtfsTripIdTask.ts?ref_type=heads#L148 -
updateDelay- opět se volá positionRepo.save https://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateDelayTask.ts?ref_type=heads#L147 -
updateDelay- redis cache pro dané spoje chceme získavat batchem, a nikoliv postupně per každé GTFS trip id -
updateDelay- před propagací zpoždění se volá bulkUpdate nad vypočtenými pozicemi a jejími spoji (tripRepo i positionRepo) - metodaupdateComputedPositionsAndTripshttps://gitlab.com/operator-ict/golemio/code/modules/pid/-/blob/development/src/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateDelayTask.ts?ref_type=heads#L242
-
- Q: Nechceme vymyslet nějaké generické řešení a rovnou to šoupnout do PG repozitáře v core?
Edited by Dan Knotek