[Fir2_tr] Lastupdate alapú törzsadat lekérdezések válaszai

Pató Imre Pato.Imre at oh.gov.hu
2020. Aug. 18., K, 12:54:21 CEST


Sziasztok!

A FIR lastupdate alapú törzsadat lekérdezéseinek módosulásáról és a törzsadatok inkrementális szinkronizálásának lehetőségéről szeretnék néhány fontos információt adni.

A FIR adatait tároló adatbázis-táblákban a lastupdate-eket triggerek töltik - ha bármi módosul egy sorban, akkor a lastupdate értéke is automatikusan változik. A lastupdate ezért egy technikai információ, nem pedig hatályossági információ - csak azt naplózza, hogy az adott rekordhoz mikor nyúltunk hozzá utoljára (pl. adatjavítási célból).
A FIR adatbázisaiban a korábban már kiosztott azonosítók fenntartásának érdekében fizikai adatrekord-törlést üzemszerűen nem végzünk. A logikai törlés során a rekordok lastupdate-je szintén módosításra kerül.
A logikailag törölt rekordok a törzsadat lekérdezésekkor nem jelennek meg a FIR által adott válasz-üzenetekben. A törzsadat lekérdezések lastupdate alapú szűrései viszont arra szolgálnak, hogy a segítségükkel inkrementális adatszinkronizáció legyen megvalósítható, ahhoz pedig fontos, hogy a lekérdezés válaszába a törlendő adatokról is kerüljön információ. A FIR2-ben ez a törzsadatok esetén sajnos nem működött jól, ezért a FIR2 lastupdate alapú lekérdezései nem voltak alkalmasak a törzsadatok inkrementális szinkronizálására. A FIR3-ban a lastupdate alapú szűrések esetén a válaszok összeállítása úgy történik, hogy ha a lekérdezett adatkörben a lekérdezési feltételnek megfelelő időszakban egy adott azonosítóhoz tartozó bármelyik rekord (egy azonosítóhoz tartozhat több rekord is különböző hatályossági adatokkal, illetve összetett adatkör esetén a kapcsolódó táblákban is tartozhatnak hozzá további rekordok) megváltozik (ideértve a rekord logikai törlésést is), akkor a válaszba bekerül egy teljes aktuális snapshot az adott azonosítóhoz tárolt adatokról. Tulajdonképpen az történik, hogy az adott azonosítóhoz tartozó snapshot lastupdate-jének kiszámításakor figyelembe vesszük az azonosítóhoz kapcsolódó törölt rekordokat is, a válaszba kerülő snapshot azonban csak a hozzá tartozó élő rekordokat tartalmazza. Ennek megfelelően, ha egy azonosítóhoz tartozó összes adatot (vagyis magát az azonosítót) töröljük a FIR-ben, akkor a megfelelő lastupdate alapú lekérdezés válaszába az adott azonosítóval egy üres snapshot kerül. A normál törzsadat lekérdezések válaszaiba ezek ez üres (törölt) snapshot-ok nem kerülnek be.
Egy inkrementális szinkronizáció megvalósításához fontos kérdés, hogy milyen feltételekkel kell futtatni a változásokat visszaadó lastupdate alapú lekérdezéseket. Ehhez több okból sem megfelelő a korábbi szinkronizálás időpontjához képest történt változások lekérdezése. A FIR és a lekérdező rendszer óráinak esetleges kisebb eltéréséből eredő problémák mellett fontosabb adottság, hogy a FIR az adatok feldolgozását és a feldolgozott adatok publikálását külön lépésekben végzi. Az adatbázis rekordjainak módosítása a feldolgozás során történik, így a módoított rekordok lastupdate-jei is a feldolgozás során állítódnak be, viszont ezek a módosulások az adatlekérdezésben csak a publikálás után látszódnak. Emiatt egy feldolgozás közbeni szinkronizáció esetén a feldolgozásban a szinkronizáció előtt, de a korábbi publikálás óta történt módosulások nem látszódnak. Ezek a következő szinkronizációba is csak akkor kerülnek be, ha a lastupdate alapú lekérdezés szűrő feltételébe nem az előző szinkronizálás időpontja, hanem az adott adatkör egészében történt utolsó ismert módosulás időpontja kerül. Ez az érték számítható a TR-ben tárolt adatok alapján (max lastupdate a megfelelő adatok között) is, de használható a FIR által a lekérdezés válaszában az utolsó lekérdezéskor az adatkörre vonatkozóan visszadott érték is.

Ha ennek kapcsán kérdésetek vagy problémátok merül fel, kérdezzetek nyugodtan.

Üdv:
Imi

--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lista.sulinet.hu/pipermail/fir2_tr/attachments/20200818/0a4aa371/attachment.html>


További információk a(z) Fir2_tr levelezőlistáról