Транзакциялардын изоляция деңгээлдери кандай?
sobes.tech AI
AIден жооп
SQLдө транзакциялардын изоляция деңгээлдери бир транзакция башка транзакциялар тарабынан жасалган, бирок дагы бекитилбеген өзгөртүүлөрдү көрө алат дегенди аныктайт. Алар параллелдүү кирүү маселелерин алдын алуу үчүн арналган: калп окулушу, кайталанбаган окулуш жана фантомдук окулуш.
Төрт стандарттуу изоляция деңгээлдери бар:
- READ UNCOMMITTED (Бекитилбеген маалыматтарды окулуш)
- Эң төмөнкү деңгээл.
- Транзакция башка транзакциялардын бекитилбеген өзгөртүүлөрүн көрө алат (калп окулушу мүмкүн).
- Кайталанбаган жана фантомдук окулушту алдын албайт.
- READ COMMITTED (Бекитилген маалыматтарды окулуш)
- Калп окулушту алдын алат.
- Транзакция гана бекитилген өзгөртүүлөрдү көрөт, алар ишке киргизилгенден кийин же сураныч башталганда бекитилет.
- Кайталанбаган жана фантомдук окулушту алдын албайт.
- REPEATABLE READ (Кайталанган окулуш)
- Калп жана кайталанган окулушту алдын алат.
- Эгер транзакция бир нече жолу сапты окуса, ал дайыма бирдей маанини көрөт, эгер ал өзү өзгөртпөсө.
- Фантомдук окулушту алдын албайт (башка транзакциялар жаңы саптарды кошушу мүмкүн, алар диапазондук суроолорду кайра иштеткенде көрүнөт).
- SERIALIZABLE (Сериализацияланган)
- Бардык параллелдүү кирүү маселелерин алдын алат: калп окулушу, кайталанбаган жана фантомдук окулуш.
- Транзакциялар такыр эле биринин артынан ишке ашырылат, бири-бирине тоскоолдук кылбай.
- Эң жогорку деңгээл, бирок эң жай, анткени көбүрөөк блоктоолорду талап кылат.
Ар бир деңгээлде алдын алынган маселелердин салыштырмалуу таблицасы:
| Изоляция деңгээли | Калп окулуш | Кайталанбаган окулуш | Фантомдук окулуш |
|---|---|---|---|
| READ UNCOMMITTED | Жок | Жок | Жок |
| READ COMMITTED | Ооба | Жок | Жок |
| REPEATABLE READ | Ооба | Ооба | Жок |
| SERIALIZABLE | Ооба | Ооба | Ооба |
Изоляция деңгээлин тандоо колдонмонун маалыматтын актуалдуулук талаптарына жана иштөө ылдамдыгына көз каранды:
Pythonдө маалымат базалары менен иштөөдө (мисалы, sqlite3, PostgreSQL үчүн psycopg2, MySQL үчүн mysql.connector) — көбүнчө тиешелүү ыкма аркылуу изоляция деңгээлин белгилөө мүмкүн:
sqlite3 үчүн деңгээл орнотуу мисалы:
# Китепкананы импорттоо
import sqlite3
// Маалымат базасына туташуу
conn = sqlite3.connect('mydatabase.db', isolation_level='REPEATABLE READ')
// 'REPEATABLE READ' ордуна None (аналогиясы — READ UNCOMMITTED), 'DEFERRED', 'IMMEDIATE', 'EXCLUSIVE' коюлушу мүмкүн
// Курсорду колдонуу мисалы
cursor = conn.cursor()
// Мурунку иштери...
// Өзгөртүүлөрдү бекитүү
conn.commit()
// Туташуу жабуу
conn.close()
psycopg2 үчүн:
// Китепкананы импорттоо
import psycopg2
// Изоляция деңгээлинин константаларын импорттоо
from psycopg2.extensions import ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_SERIALIZABLE
// Маалымат базасына туташуу
conn = psycopg2.connect(database="mydatabase", user="myuser", password="mypassword", host="localhost")
// Изоляция деңгээлин орнотуу
conn.set_isolation_level(ISOLATION_LEVEL_SERIALIZABLE)
// Мүмкүн болсо, ISOLATION_LEVEL_READ_UNCOMMITTED, ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_REPEATABLE_READ, ISOLATION_LEVEL_SERIALIZABLE колдонсо болот
// Курсорду колдонуу мисалы
cursor = conn.cursor()
// Мурунку иштери...
// Өзгөртүүлөрдү бекитүү
conn.commit()
// Туташуу жабуу
conn.close()
Стандарттык деңгээлдер туруктуулук жана иштөө ылдамдыгынын ортосунда баланс түзөт, көбүнчө READ COMMITTED жана SERIALIZABLE колдонулат.