Şimdi Ara

Django Query Optimizasyon Paketi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
7
Cevap
0
Favori
331
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
1 oy
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.
    _____________________________
    İkinci el ürün alım-satımında kullanılan bilgilerim
    Gö**** Yı****, Adres Bornova/İzmir, Telefon 054****4274, Ödeme aldığım ve ödeme yaptığım tek banka Enpara Bank A.Ş., IBAN TR09****670046
    İletişim: forum üzerinden mesajlaşma, telefon ile arama veya whatsapp üzerinden mesajlaşma.
  • quote:

    Orijinalden alıntı: _Anaksimenes

    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

    _____________________________
    İnanmayabilirsiniz ama bu hesaptan atılan bütün mesajlar uzun sürecek bir sosyal deneyin parçasıdır.
  • 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.