⚡ 4-BO‘LIM: Performance Optimization (Backend, DB, API, Pandas) – savollar va javoblar
1. Django/DRF’da sekin ishlayotgan API’ni qanday optimizatsiya qilganing bor?
- N+1 query muammosi bormi? →
select_related
,prefetch_related
bilan hal qilinadi. - Serializer darajasida – unnecessary nested yoki
depth=2
muammosi. - QueryCountMiddleware bilan query’lar sonini kuzataman.
- Pagination – har doim ishlatish kerak.
- Indexlar – filtering ustunlariga
db_index=True
yokiMeta: index_together
.
2. Django’da select_related
va prefetch_related
farqi nima?
select_related
– OneToOne / ForeignKey bo‘yicha SQL JOIN qiladiprefetch_related
– ManyToMany / Reverse FK uchun alohida query yuboradi
Book.objects.select_related("author") # JOIN bilan
Author.objects.prefetch_related("books") # alohida query bilan
3. SQLAlchemy’da slow query’ni optimallashtirish?
joinedload
,subqueryload
,lazy='selectin'
orqali N+1 ni kamaytirish- Query profiling uchun:
echo=True
,sqlalchemy.engine.logger
- Index yaratish (
Index
,unique
,nullable=False
)
session.query(Post).options(joinedload(Post.comments))
4. DRF API performance: caching qayerda kerak?
- Low-level:
@lru_cache
,@cache_page
,cache.set()
- High-level: Redis bilan fragment caching
- Throttling: DRF’da per-user, per-IP throttles
- Conditional GET: ETag /
Last-Modified
bilan ishlash
5. Redis bilan qanday caching qilganing bor?
# Django caching
from django.core.cache import cache
cache.set("key", "value", timeout=60*5)
cache.get("key")
- View-level cache –
@cache_page
- Low-level – frequently accessed query’lar natijasini saqlash
- Rate-limiting – Redis +
ip:count
pattern
6. Pandas’da performance profiling qanday qilinadi?
import pandas as pd
import numpy as np
%timeit df["value"] = df["a"] + df["b"] # timing
df.memory_usage(deep=True)
astype()
bilan turlarni siqishcategory
turlarapply()
dan qochish → vectorized opsquery()
,eval()
– C backend’da tezroq bajariladi
7. Async bilan performance oshirish misollari?
FastAPI misolida:
@app.get("/users")
async def get_users():
async with async_session() as session:
result = await session.execute(select(User))
return result.scalars().all()
- Async SQLAlchemy yoki Tortoise ORM
- IO-bound task’lar (API, Redis, DB) uchun async kerak
8. DRF’da ListAPIView
optimizatsiyasi?
pagination_class
filterset_class
,search_fields
,ordering_fields
→ DRF’da avtomatik qidiruvonly()
bilan faqat kerakli ustunlarni olish
queryset = MyModel.objects.only("id", "name")
9. PostgreSQL performans: qanday tahlil qilasan?
EXPLAIN ANALYZE
bilan query execution plan- Index qilingan ustunlar:
btree
,gin
,gist
- Connection pool:
pgbouncer
yokiconn_max_age
sozlamasi
EXPLAIN ANALYZE SELECT * FROM users WHERE email='a@example.com';
10. API ni 1 million request/second ga tayyor qilishda nima qilasan?
- Horizontal scaling – Kubernetes + HPA
- Redis caching + async
- Gunicorn tuning –
workers
,threads
,keep-alive
- CDN / Edge caching – Cloudflare
- Database connection pooling
- Stateless services – scale-friendly