Senior
63
Екі параллель транзакциялар бір жолды жаңартады (шегеру және есептеу) — не істеу керек? Жоғалған жаңарту мәселесі.
Сұралған компаниялар
ТБанк
AI-дан жауап
sobes.tech AI
Жоғалған жаңарту мәселесі екі параллель транзакциялар бірдей жолды оқып, оны өзгертіп, қайта жазғанда пайда болады, ал бір өзгеріс жоғалады.
Осы мәселені болдырмау үшін транзакциялардың дұрыс оқшаулануын және жаңартуларды синхрондауды қамтамасыз ету керек. Негізгі тәсілдер:
-
Блоктау қолдану (пессимистік блоктау):
- Жолды оқығанда блок қойылады, ол басқа транзакциялардың оны өзгертуіне мүмкіндік бермейді.
- Мысалы, SQL-де
SELECT ... FOR UPDATE.
-
Оптимистік блоктау:
- Кестеге нұсқа немесе уақыт белгілері қосылады.
- Жаңарту кезінде нұсқа өзгермегенін тексереді.
- Егер өзгерсе — транзакция қайтарылады немесе қайта орындалады.
-
Дұрыс оқшаулану деңгейі:
SERIALIZABLEдеңгейі транзакциялардың кезектесіп орындалуын кепілдейді, бірақ өнімділікті төмендетуі мүмкін.
-
Атомарлы операцияларды қолдану:
- Мысалы, SQL
UPDATE ... SET value = value + ?көмегімен алдын ала оқымай-ақ жаңарту.
- Мысалы, SQL
Оптимистік блоктау мысалы:
// Кестеде version өрісі бар деп болжаймыз
// Жолды нұсқасымен оқимыз
SELECT balance, version FROM accounts WHERE id = ?;
// Жаңарту кезінде
UPDATE accounts SET balance = ?, version = version + 1 WHERE id = ? AND version = ?;
// Егер әсер еткен жолдар саны 0 болса, нұсқа өзгерген — операцияны қайталау керек
Осылайша, жоғалған жаңартуды болдырмау үшін блоктау немесе оптимистік нұсқа бақылау механизмдерін қолдану керек.