Sobes.tech
Middle
193

Proqram təminatı inkişafı kontekstində əməliyyatlara hansı tələblər qoyulur?

AI-dan cavab

sobes.tech Süni İntellekt

Əməliyyatlar ACID xüsusiyyətlərinə cavab verməlidir:

  • Atomiklik: Əməliyyat ya tamamilə yerinə yetirilməli və ya tamamilə ləğv edilməlidir. Əgər əməliyyatın bir hissəsi uğursuz olarsa, bütün əməliyyat başlanğıc vəziyyətinə qaytarılır.
  • Uyğunluq: Əməliyyat verilənlər bazasını bir uyğun vəziyyətdən digərinə keçirir. O, məlumatların bütövlüyünü və ya məhdudiyyət qaydalarını pozmamalıdır.
  • İzolyasiya: Eyni vaxtda yerinə yetirilən əməliyyatlar bir-birinə təsir etməməlidir. Bir neçə əməliyyatın nəticəsi, sanki ardıcıl olaraq yerinə yetirilmiş kimi olmalıdır. İzolyasiya problemlərinə daxildir:
    • Çirkli oxuma: Hələ başqa bir əməliyyat tərəfindən təsdiqlənməmiş (commit edilməmiş) məlumatların oxunması.
    • Təkrarlanmayan oxuma: Eyni məlumatların bir əməliyyat daxilində bir neçə dəfə oxunması və fərqli dəyərlər alınması, çünki başqa bir əməliyyat onları dəyişib və təsdiqləyib.
    • Fantom oxuma: Eyni əməliyyat daxilində sorğunun yenidən icrası zamanı, başqa bir əməliyyat tərəfindən əlavə olunmuş və ya silinmiş sətirlər ilə başqa bir sıra toplusu qaytarılır, çünki onlar şərtə cavab verir.
  • Davamlılıq: Uğurla tamamlanan (təsdiqlənmiş) əməliyyatdan sonra, onun etdiyi dəyişikliklər daimi olmalı və sistem nasazlıqlarına (məsələn, enerji kəsilməsi) davam gətirməlidir.

Java-da, əməliyyatların idarə olunması üçün tez-tez Spring Framework kimi çərçivələr və deklarativ əməliyyat idarəetməsi (@Transactional) və ya Java Transaction API (JTA) istifadə olunur.

@Transactional istifadə nümunəsi:

@Transactional  
public void processOrder(Order order) {  
    // Sifarişin işlənməsi loqikası  
    // Məsələn, hesabdan vəsaitin çıxarılması  
    accountService.debit(order.getCustomerId(), order.getAmount());  

    // Sifariş statusunun yenilənməsi  
    orderRepository.updateStatus(order.getId(), "Processed");  

    // Xəta baş verdikdə (məsələn, kifayət qədər vəsait yoxdursa)  
    // bütün əməliyyat avtomatik olaraq geri alınacaq,  
    // başqa cür göstərilməyibsə (@Transactional(noRollbackFor = ...))  
}