aggregate vs annotage

aggregate vs annotage

Biz Django-da queryset ustida qo’shimcha hisob-kitob va guruhlashlarni bajarish uchun annotat va aggregate methodlaridan foydalanamiz. Bu postda biz sizlar bilan ularni qanday va qay hollarda ishlatishni ko’rib chiqamiz.

Annotate methodi:

Bu method queryset yangi maydon (field) qo’shadi. Buni biz ko’pincha hisoblashda ishlatamiz. Misol uchun siz OnlineShop loyihangiz bor va Siz har bir foydalanuvchi (user) shu kungacha qancha mahsulotga order berganini hisoblamoqchisiz.

from django.db.models import Count
User.objects.annotate(total_orders=Count('orders'))

Bu yerda har bir foydalanuvchiga (User) tegishli orders maydoni asosida total_orders nomli yangi maydon qo'shiladi. Bu maydon har bir foydalanuvchining qancha buyurtma qilganini ko'rsatadi.

Yana bir misol: Agar foydalanuvchi tomonidan buyurtma qilingan mahsulotlar sonini hisoblashni xohlasangiz:

User.objects.annotate(total_products=Count('orders__products'))

Bu misolda har bir foydalanuvchi uchun jami mahsulotlar soni hisoblab beriladi, ya'ni foydalanuvchining qancha turli mahsulotlarga buyurtma bergani ko'rsatiladi.

annotate ko'p hollarda statistik hisobotlar yoki guruhlashlar kerak bo'lganda ishlatiladi, va natija har bir ob'ektga individual ravishda hisoblangan qo'shimcha maydon sifatida qaytariladi.

Aggregate metodi:

Bu metodni umumiy hisob-kitoblar, masalan: o‘rtacha qiymat, umumiy miqdor yoki maksimal/minimal qiymatlarni olish uchun ishlatamiz. aggregate bilan ishlaganda biz butun queryset o'rniga bitta umumiy qiymatni olamiz. Agar sizga har bir Product-ga qo’yilgan reytinglarning o'rtacha qiymatini olmoqchi bo’lsangiz, buni aggregate yordamida amalga oshirish mumkin.

from django.db.models import Avg
Rate.objects.filter(product_id=pk).aggregate(average_rating=Avg("rate"))

Bu yerda:

Keling endi bu methodlarning ish samaradorligi (Performance) qanday ekanligini ko’rib chiqamiz.

Xulosa:

Yuqoridagi metodlar bilan ishlaganda to'g'ri indekslarni qo'llash va ma'lumotlar bazasini optimallashtirish katta ma'lumotlar ustida ishlash tezligini sezilarli darajada yaxshilaydi.

Agar katta hajmdagi ma'lumotlar bilan ishlayotgan bo'lsangiz, iloji boricha annotate va aggregate larni iloji boricha qisqartiring yoki ularni muvofiq bo'laklarga bo'lib ishlang.

Ko’proq ma’lumot olish uchun 🌐 Telegram kanalga a’zo bo‘ling