Sobes.tech
Middle

Mi a zárolás az adatbázisokkal való munkában, és miért szükségesek?

sobes.tech MI

Válasz az MI-től

Az adatbázisok zárolásai olyan mechanizmusok, amelyeket több felhasználó vagy folyamat ugyanazon adatokhoz való hozzáférésének kezelésére használnak egyidejűleg. Megakadályozzák a konfliktusokat, és fenntartják az adatok integritását versengő környezetben.

Ezek szükségesek a következő problémák megoldásához:

  • Versenyhelyzetek (Race Conditions): Olyan helyzet, amikor a műveletek végrehajtási sorrendje befolyásolja a végső eredményt. A zárolások biztosítják, hogy a műveletek szekvenciálisan vagy az adatok számára biztonságos sorrendben hajtódjanak végre.
  • Inkonzisztens olvasások (Inconsistent Reads): Egy folyamat adatokat olvas, miközben egy másik módosítja azokat, ami ideiglenes vagy hiányos adatállapothoz vezethet. A zárolások ezt megelőzhetik.
  • Elveszett frissítések (Lost Updates): Két folyamat ugyanazokat az adatokat olvassa, módosítja, majd elmenti. Az utolsó mentés felülírja az első változtatásait, elveszítve azokat. A zárolások segítenek elkerülni az adatok elvesztését.
  • Fantom olvasások (Phantom Reads): Egy tranzakción belül egy ismételt lekérdezés más sorokat ad vissza, mert egy másik folyamat hozzáadott vagy eltávolított sorokat, amelyek megfelelnek a lekérdezés feltételeinek.

Fő zárolási típusok:

  • Megosztott (Shared/Read Lock): Lehetővé teszi több tranzakciónak, hogy ugyanazokat az adatokat párhuzamosan olvassák. Nem engedélyezi az írási zárolásokat ugyanazon az adaton.
  • Kizárólagos (Exclusive/Write Lock): Monopóliumi hozzáférést biztosít az adatokhoz. Csak egy tranzakció lehet kizárólagos zárolással bizonyos adatokon egy időben. Nem engedélyezi az olvasási vagy írási zárolásokat ugyanazon az adaton.

A zárolások különböző szinteken alkalmazhatók:

  • Adatbázis szintjén: Az egész adatbázis zárolva van. Ritkán használják.
  • Tábla szintjén: Az egész tábla zárolva van. Kevésbé részletes, csökkentheti a konkurenciát.
  • Sor szintjén: Egy adott sor zárolva van. Részletesebb, támogatja a magas konkurenciát, de több erőforrást igényelhet.
  • Oldal szintjén: Egy adatlap (több sort tartalmazó tárolási egység) zárolva van. Egy kompromisszum a teljes tábla és a sor zárolása között.

A zárolások megvalósítása a konkrét SGBD-től függ (pl. InnoDB és MyISAM a MySQL-ben különböző stratégiákkal rendelkezik, PostgreSQL stb.). PHP-ben gyakran tranzakciókat használnak a zárolások kezelésére.

-- Példa tranzakció és zárolás használatára SQL-ben
START TRANSACTION;

SELECT balance FROM accounts WHERE account_id = 123 FOR UPDATE;
-- A FOR UPDATE kizárólagos zárolást helyez a kiválasztott sorra

UPDATE accounts SET balance = balance - 100 WHERE account_id = 123;

COMMIT;
-- Vagy hiba esetén ROLLBACK