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:
-
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.
-
Parallel ishlash: so'rovni qayta ishlashda mustaqil operatsiyalarni parallel ravishda bajarish uchun goroutine'larni ishlatdim.
-
Ma'lumotlar bazasiga so'rovlarni optimallashtirish: SQL so'rovlarini qayta yozdim, bajarilish vaqtini qisqartirish uchun indekslar qo'shdim.
-
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.