Sobes.tech
Middle

Талаботи дар доираи таҳияи нармафзор ба транзаксияҳо чӣ гуна аст?

sobes.tech AI

Ҷавоб аз AI

Транзакциялар тиешилүү ACID касиеттерин:

  • Атомардык (Atomicity): Транзакция толугу менен аткарылышы керек же толугу менен болтурмалы болушу керек. Эгер транзакциянын кандайдыр бир бөлүгү иштебесе, бардык транзакция баштапкы абалга кайтарылат.
  • Туруктуулук (Consistency): Транзакция базаны бир туруктуу абалдан экинчи туруктуу абалга өткөрөт. Ал маалыматтын бүтүндүгүн бузбашы керек же чектөө эрежелерин бузбашы керек.
  • Изоляция (Isolation): Бир убакта ишке ашып жаткан транзакциялар бири-бейне таасир этпеши керек. Бир нече транзакциянын аткарылышы натыйжасы ошол эле болушу керек, эгер алар кезектешип аткарылса. Изоляциянын көйгөйлөрү:
    • Кычырган окуу (Dirty read): Башка транзакция менен дагы бекитилбеген (commit) маалыматтарды окуу.
    • Кайталап окуу (Non-repeatable read): Бир транзакциянын ичинде бир эле маалыматты кайра-кайра окуу башка маанилерди кайтарат, анткени башка транзакция алардын маанисин өзгөртүп бекиткен.
    • Фантом окуу (Phantom read): Бир транзакциянын ичинде шарт менен кайра аткарылганда башка саптар топтому кайтарылат, анткени башка транзакция шартка ылайык саптарды кошкон же өчүргөн.
  • Туруктуулук (Durability): Транзакция ийгиликтүү аяктагандан кийин (бекитилгени) анын киргизген өзгөрүүлөрү туруктуу болушу керек жана системдик бузулуларга туруштук берүүчү болушу керек (мисалы, энергия өчүрүү).

Javaда транзакцияларды башкарууда Spring Framework сыяктуу рамкалар кеңири колдонулат, ал декларативдүү транзакция башкаруу (@Transactional) же Java Transaction API (JTA) менен иштейт.

@Transactional колдонуу мисалы:

@Transactional  
public void processOrder(Order order) {  
    // Тапшырыкты иштетүү логикасы  
    // Мисалы, эсебинен каражаттарды чыгарып алуу  
    accountService.debit(order.getCustomerId(), order.getAmount());  

    // Тапшырык статусун жаңыртуу  
    orderRepository.updateStatus(order.getId(), "Processed");  

    // Эгер ката (мисалы, каражат жетишсиздик) болсо  
    // бардык транзакция автоматтык түрдө кайтарылат,  
    // эгер башкача көрсөтүлбөсө (@Transactional(noRollbackFor = ...))  
}