CodeBiting / onion-cargo-loading-service

Servei per determinar quin contenidor fer servir i com s'han de disposar els elements a dins
MIT License
1 stars 4 forks source link

Canvia els serveis de client, container i register per treballar contra BD MySql #23

Closed jordidh closed 1 year ago

jordidh commented 1 year ago

Implementar accés a la BD MySQL per guardar-hi els clients, contenidors i registres de crides

Per aquesta implementació s'ha de fer el següent:

Per implementar la connexió amb MySql es consideren aquests mòduls per Nodejs i Expressjs:

Per implementar-ho es tria fer servir mysql2 pels següents motius:

  1. Prioritzem rendiment sobre compatibilitat, per tant descartem les ORM i query builders ja que afegixen capes i lentitut
  2. Dels dos drivers MySql triem mysql2 ja que ofereix un rendiment superior i conté els elements bàsics per treballar amb MySql (pool de connexions i transaccions).

Per tal de treballar de forma concurrent i sense bloqueigs a partir de múltiples serveis contra la mateixa base de dades, per agafar registres i fer-hi operacions de modificació o esborrat es pot fer de diferents maneres (no fer res i el que actualitza l'últim guanya, concurrència optimista en que es suposa que hi haurà pocs conflictes i l'usuari afectat no li farà res tornar-ho a intentar), concurrència pessimista on es suposen molts conflictes i que els usuaris afectats no voldran reintantar-ho).

Nosaltres farem servir concurrència optimista amb versionat, això vol dir:

 - SELECT iD, val1, val2, version
       FROM theTable
       WHERE iD = @theId;
 - {code that calculates new values}
 - BEGIN TRANSACTION;
 - UPDATE theTable
       SET val1 = @newVal1,
           val2 = @newVal2,
           version = version + 1
       WHERE iD = @theId
           AND version = @oldversion;
 - {if AffectedRows == 1 }
 -     COMMIT TRANSACTION;
 -     {go on with your other code}
 - {else}
 -     ROLLBACK TRANSACTION;
 -     {decide what to do since it has gone bad... in your code}
 - {endif}