Sobes.tech
Junior — Middle

REST API ning ish faoliyatini oshirishga muvaffaq bo'lgan holat haqida gapiring.

sobes.tech AI

AIdan javob

Go loyihalarimdan birida REST API ning samaradorligini oshirdim, so'rovlarni qayta ishlashni optimallashtirib va javob vaqtini qisqartirib.

Qilgan ishlar:

  1. Kesh: tez-tez so'raladigan ma'lumotlar uchun in-memory kesh (masalan, Redis yoki ichki map va mutex bilan) qo'shdim, bu bazaga yukni kamaytirishga yordam berdi.

  2. Parallel ishlash: so'rovni qayta ishlashda mustaqil operatsiyalarni parallel ravishda bajarish uchun goroutine'larni ishlatdim.

  3. Ma'lumotlar bazasiga so'rovlarni optimallashtirish: SQL so'rovlarini qayta yozdim, bajarilish vaqtini qisqartirish uchun indekslar qo'shdim.

  4. Context (context.Context) dan foydalanish: uzoq davom etadigan so'rovlarni o'z vaqtida to'xtatish va resurslarni bo'shatish uchun.

Kodni misol sifatida kesh va goroutine'lar bilan:

var cache = make(map[string]string)
var mu sync.RWMutex

func getData(key string) (string, error) {
    mu.RLock()
    if val, ok := cache[key]; ok {
        mu.RUnlock()
        return val, nil
    }
    mu.RUnlock()

    // Ma'lumotlar bazasiga so'rovni simulyatsiya qilish
    data := "BD dan ma'lumot uchun " + key

    mu.Lock()
    cache[key] = data
    mu.Unlock()

    return data, nil
}

func handler(w http.ResponseWriter, r *http.Request) {
    key := r.URL.Query().Get("key")

    // Parallel ma'lumotlarni olish
    var wg sync.WaitGroup
    var result string
    var err error

    wg.Add(1)
    go func() {
        defer wg.Done()
        result, err = getData(key)
    }()

    wg.Wait()

    if err != nil {
        http.Error(w, "Xato", http.StatusInternalServerError)
        return
    }

    w.Write([]byte(result))
}

Natijada, API ning javob vaqti qisqardi, bazaga yuk kamaydi va xizmatning umumiy ishlash samaradorligi yaxshilandi.