Şimdi Ara

Django Query Optimizasyon Paketi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
7
Cevap
0
Favori
293
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
1 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Herkese merhaba arkadaşlar,

    Şirket içinde bazı projelerimizde yaşadığımız n+1 hit problemlerinden dolayı django-rest serializerlarını otomatik olarak select_related, prefetch_related, only, values gibi django metodları ile optimize eden bir paket hazırlamıştım bu paketi meraklısına veya benzer problemleri yaşamış olanlara inceleyebilmesi, kullanabilmesi, fikir vermesi adına github üzerinden paylaştım.

    Nasıl çalıştığını readme üzerinde detaylıca anlatmaya çalıştım. Kodu da temiz ve yorumlarla destekleyerek yazmaya çalıştım anlaşılabilmesi adına. Geri dönüşleriniz olursa mutlu olur ve zevkle değerlendiririm.

    GitHub linki: django-auto-related







  • Helal olsun elinize sağlık 👍🏼👍🏼👍🏼

    < Bu ileti mini sürüm kullanılarak atıldı >
  • merhaba hocam,
    paylaşım için teşekkür ederiz. n+1 problemi nedir acaba biraz daha açabilir misiniz? teşekkürler.
  • quote:

    Orijinalden alıntı: anaksimenes35

    merhaba hocam,
    paylaşım için teşekkür ederiz. n+1 problemi nedir acaba biraz daha açabilir misiniz? teşekkürler.
    n+1 problemi django-orm yada sqlalchemy gibi sql kullanmadan database ile uğraşmanızı yarayan paketlerin yan etkilerinden biri. Normalde djangoda şöyle bir kod yazmanız oldukça muhtemel:

    class ModelA(Model):
    relation_field=ForeignKey('ModelB')

    class ModelB(Model):
    name=CharField()

    for obj in ModelA.objects.all():
    print(obj.relation_field.name)

    Bu for loop'u normal bir python loopu gibi görünüyor fakat django querysetleri lazy evaluation kullandığı için aslında her iteration'da bir database access'i yani io işlemi yapıyorsunuz. Normalde bir join yapıp tek query ile alabileceğiniz bir bilgiyi. N+1 sorgu yaparak alıyorsunuz. N burda ModelA class'ına ait obje sayısı oluyor. +1 ise .all() ile biten queryden kaynaklanıyor. Orm kullanıldığı zaman bu tarz hataların gözden kaçması çok muhtemel o yüzden dikkatli olunması gerekiyor çünkü çok küçük bir db ile bile çalışırken büyük performans kayıplarını yol açabiliyor bu problem eğer modelleriniz biraz fazla nested relational fieldlar barındırıyor ise.

    Hele bir de django-rest-framework ile kullandığınız zaman araya bir layer daha eklendiği için bunun gözden kaçması çok daha olası oluyor. Django'nun buna çözümü ise select_related ve prefetch_related metodları. Bu metodlar bildiğimiz sql joinleri yaparak tek seferde bütün verinin getirilmesini sağlıyor. (Prefetch_related tam olarak sql joini yapmıyor yanlış bilgi vermiş gibi olmayayım ama mantığı aynı)



    < Bu mesaj bu kişi tarafından değiştirildi tarbantino -- 14 Ağustos 2020; 12:47:14 >




  • quote:

    Orijinalden alıntı: CarnageTR

    Helal olsun elinize sağlık 👍🏼👍🏼👍🏼
    Teşekkürler
  • up

  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.