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]- A PostgreSQL-lel kapcsolatban: Function Volatility Categories