Volatilitás (programozás)

A volatilitás fogalma a programozásban arra utal, hogy egy érték (pl. változó, függvényérték, objektumtulajdonság) mennyire változó, jelesül hogy több egymást követő hozzáférés során garantálható-e az állandósága. Egy volatilis, azaz változékony érték több okból módosulhat két hozzáférés között. Például a függvény a háttértárból vagy az adatbázisból vett adatokkal dolgozik, amelyek megváltozhatnak közben, függ az órajeltől, vagy egy objektum valamilyen tulajdonságát a többszálas programozás során egy másik szál módosíthatja. Ezt az információt az optimalizáló algoritmusok hasznosíthatják, illetve a többszálas program szervezésében is szerepet játszik. A fogalom pontos tartalma azonban programozási nyelvenként eltérő.

A PostgreSQL-ben szerkesztés

A PostgreSQL adatbázis-kezelő rendszerben a volatilitás a függvények visszatérési értéke és mellékhatásai alapján megállapított kategória. Három szintje van:

Volatile (volatilis)
A függvény értéke azonos paraméterekkel is hívásról hívásra változhat, módosítja az adatbázist vagy más mellékhatása van. Akkor is ezt a kategóriát kell használni, ha a függvény a random(), currval(), timeofday() vagy ehhez hasonló folyton változó értékű függvények valamelyikét használja. Ez az alapértelmezés szerinti szint, vagyis ha nem használunk külön szintjelölőt, a függvény volatilis lesz. A volatilis függvényeket az optimalizálás során nem lehet egyszerűsíteni, minden alkalommal le kell futniuk.
Stable (stabil)
A függvény nem módosíthatja az adatbázist, és egy munkameneten belül azonos paraméterekkel garantáltan azonos eredményt ad. Ilyen lehet például egy indexelésen alapuló összehasonlítás. Az optimalizáló gondoskodik róla, hogy a függvény csak egyszer fusson le, és a továbbiakban a kapott értéket hasznosítja.
Immutable (megváltoztathatatlan)
A függvény nem változtat az adatbázis állapotán, és azonos paraméterekkel garantáltan mindig ugyanazt az eredményt adja. Ez a legjobban optimalizálható szint. Például ha egy adatbázistábla egyik mezőjében 1 jelöli, hogy a felhasználó férfi, 2, hogy nő, és írunk egy nem() függvényt, amely szövegesen rendre a 'férfi', 'nő' értékeket adja vissza ezekre a számokra, és minden más bemenetre a NULL értéket, akkor ez egy megváltoztathatatlan függvény lesz, mert ahányszor a 2 argumentummal hívjuk meg, mindig a 'nő' értéket kapjuk, és nincs mellékhatása. Az optimalizáló így a függvényhívásokat konstans értékekkel helyettesítheti, ami nagyon sok rekordon való futtatás esetén jelentős gyorsulást okoz.

A gyorsabb működés érdekében ajánlott a lehetséges legmagasabb volatilitási szint megjelölése.

Források szerkesztés

Kapcsolódó szócikkek szerkesztés