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:
- Elanı qəbul etdikdə, unikal açar (məsələn, UUID və ya hash) yaradılır.
- Bu açar ilə, unikal məhdudiyyətə malik verilənlər bazasına qeyd əlavə etməyə çalışırıq.
- Əgər əlavə uğurlu olursa, elan yeni və emal edilir.
- Ə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.