Sobes.tech
Middle+

Təkrarlanan elanların gəlməməsi üçün idempotentliyi necə qurmusunuz?

sobes.tech Süni İntellekt

AI-dan cavab

İş elanlarının emalında idempotentlik adətən hər bir elanın unikal identifikasiyası və emaldan əvvəl onun mövcudluğunun yoxlanması ilə əldə edilir. Go dilində, məsələn, elanını tanımlayan sahədə unikal indeks olan verilənlər bazasından istifadə etməklə bunu həyata keçirmək olar (məsələn, ID və ya məzmunun hash-i).

Yanaşma nümunəsi:

  1. Elanı qəbul etdikdə, unikal açar (məsələn, UUID və ya hash) yaradılır.
  2. Bu açar ilə, unikal məhdudiyyətə malik verilənlər bazasına qeyd əlavə etməyə çalışırıq.
  3. Əgər əlavə uğurlu olursa, elan yeni və emal edilir.
  4. Əgər unikallıq xətası baş verərsə, bu, elan artıq emal olunub və onu nəzərə almırıq.

Go dilində verilənlər bazası ilə nümunə kod:

func processAd(ad Ad) error {
    // ad.ID — unikal elan identifikatoru
    err := db.InsertAd(ad)
    if err != nil {
        if isUniqueViolation(err) {
            // Elan artıq emal olunub
            return nil
        }
        return err
    }
    // Elanı emal et
    return handleAd(ad)
}

Həmçinin, Redis kimi keşi istifadə etmək və açarı müəyyən müddət üçün təyin etmək, təkrarlanan sorğuları tez rədd etmək üçün mümkündür.