Spracovanie transakcií

Ako obmedziť spracovanie transakcií, napr. pri importe veľkých XML

Lenka Haringerová avatar
Written by Lenka Haringerová
Updated over a week ago

Táto stránka opisuje pokročilý variant importu XML, ktorý môže pri nesprávnom použití viesť k nekonzistentnosti údajov!

V predvolenom nastavení sa každý import vykoná ako jedna databázová transakcia - takže sa buď uloží všetko, alebo sa neuloží nič.

Zvyčajne je to želané správanie a zvyčajne nie je dôvod nič na ňom meniť. Môžu však nastať situácie, keď transakčné správanie nie je potrebné, potom sa atribút atomic môže použiť na zmenu tohto správania.

<?xml version="1.0"?>

Ak nastavíte atribút atomic na false, každý záznam sa importuje v samostatnej transakcii. V uvedenom príklade teda existujú dve databázové transakcie, jedna pre faktúru 123 a druhá pre faktúru 456. Položky sú súčasťou faktúry, a preto sa importujú v rámci tej istej transakcie ako samotná faktúra.

Aký je z toho úžitok? Keď importujete veľké XML s mnohými záznamami, transakcia trvá dlho a v pamäti sa musí uchovávať veľa informácií. Obe majú negatívny vplyv na výkonnosť. Ak je však každý záznam samostatný a nevadí vám, že uloženie jedného z nich zlyhá (napr. ak import pravidelne opakujete a/alebo môžete v prípade problémov zasiahnuť ručne), môžete výrazne znížiť pamäťovú náročnosť importu.

V prípade skutočne veľkých importov sú požiadavky na pamäť na ukladanie údajov, ktoré ešte neboli uložené, také veľké, že značnú časť času procesora začne zaberať garbage collector (to možno sledovať napr. pomocou nástroja jconsole, ktorý je štandardnou súčasťou vývojového prostredia JDK). V režime atomic="false" možno v takom prípade spotrebu času výrazne znížiť.

Did this answer your question?