( uid_4656 | 2020. 02. 27., cs – 19:20 )

Az érdemi szakmai részre (batch vs. real-time) reagálnék egy kis eszmefuttatással. Lehet, hogy jobban jársz, ha nem olvasod el :-)

Tegyük fel, hogy van az "egyenlegek" nevű táblád a hagyományos SQL adatbázisodban. A sorokban egy-egy "számlaszám", és a rajta lévő "egyenleg" szerepel.

A batch feldolgozást általában úgy csinálják, hogy: 

UPDATE egyenlegek SET egyenleg = egyenleg + valamennyi1 WHERE szamlaszam = 'NAV ÁFA számlaszám'
UPDATE egyenlegek SET egyenleg = egyenleg + valamennyi2 WHERE szamlaszam = 'NAV ÁFA számlaszám'
UPDATE egyenlegek SET egyenleg = egyenleg + valamennyi3 WHERE szamlaszam = 'NAV ÁFA számlaszám'
...
COMMIT

Tök gyorsan lefut, juhéj.

Real-time pedig optimális esetben több szálon, egymással párhuzamosan megy az, hogy:

UPDATE egyenlegek SET egyenleg = egyenleg + valamennyiN WHERE szamlaszam = 'NAV ÁFA számlaszám'
COMMIT

UPDATE egyenlegek SET egyenleg = egyenleg + valamennyiM WHERE szamlaszam = 'NAV ÁFA számlaszám'
COMMIT
...

itt bizony előfordulhat, hogy a sok párhuzamos szál ugyanarra a sorra vonatkozó lockért versenyzik egymással, emiatt az áteresztőképesség sokkal kisebb.

Nem kell elmondanod, hogy ez az egész úgy vacak, ahogy van, én is tudom - de legalább 5 magyar bankról tudom, hogy belefutott ebbe a problémakörbe, úgyhogy nem teljesen világtól elrugaszkodott a dolog.

Azt sem kell elmondanod, hogy pl. egy lehetséges megoldás az, hogy a fentebbi helyett:

  • csinálsz még egy egyenleg_delták táblát
  • abba INSERT-elgetsz, mert akkor nem kell a lockokért versenyezni
  • másik folyamatban, pl. batch jelleggel ( :-) ) UPDATE-elgeted az egyenlegek táblát
  • ...és az elmúlt tizen-huszon évben írt összes lekérdezésedet, amelyben volt "JOIN egyenlegek" rész átírod, hogy inkább valami tárolt eljárással visszaadott egyenleggel (ami az egyenlegek és az egyenleg delták ismeretében kiszámolható) dolgozzon... - ööö, ez az utolsó lépés azért tud időigényes lenni.

Remélem ezzel demonstráltam, hogy számos bankokkal dolgozó kolléga képes ám megoldásokat szállítani - de nem képes időigényes problémákat rövid idő alatt megoldani. És ez bizony szerintem nem az ő hibájuk, és nem kell kirúgni őket, mint alkalmatlan alkalmazottakat...