Sobes.tech
Junior — Middle

Əməliyyatların mənfi nəticəsiz təkrarlanmasını necə təmin etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Əməliyyatların təkrarlanması üçün, onların idempotent olması lazımdır. Bu, eyni parametrlərlə əməliyyatın ikinci çağırışının ilk uğurlu icrasından sonra sistem vəziyyətini dəyişməməsi deməkdir.

Bunun üçün:

  • Unikal sorğu identifikatorlarından (məsələn, UUID) istifadə etmək və onları saxlamaq, beləliklə, təkrar sorğu alındıqda, sadəcə əvvəlki nəticəni geri qaytarmaq olar.
  • Əməliyyatları belə tərtib etmək ki, artıq tətbiq olunubsa, vəziyyəti dəyişməsin (məsələn, dəyəri sabit bir dəyərə yeniləmək, artırmaq yerinə).
  • Verilənlər bazalarında tranzaksiya mexanizmlərindən istifadə etmək və qeyd mövcuddurmu yoxlamaq.

Go dilində nümunə:

var processedRequests = make(map[string]bool)

func processRequest(id string) string {
    if processedRequests[id] {
        return "Sorğu artıq işlənib"
    }
    // Əməliyyatı yerinə yetir
    processedRequests[id] = true
    return "Sorğu uğurla işlənib"
}

Bu şəkildə, eyni id ilə ikinci çağırış, vəziyyəti yenidən dəyişməyəcək.