Hemen konuya giriyorum. MongoDB’ye, MongoEngine aracılığı ile 7 farklı şart içeren bir query atıyorum ve Queryden dönen data, list biçiminde dönüyor. Bu listi foreach ile dönüyorum fakat bu foreach oldukça yavaş çalışıyor. Yüz binlerce data olduğunu varsayarsak beni çok yavaşlatıyor. Yardımlarnızı bekliyorum.
Kod:
mongo_data=mongo_models.ParsedDataTest.objects.filter(Q(dimensions__0=dimension)&Q(dimensions__1=metric)&Q(dimensions__2=segment)&Q(dimensions__3=custom_dimension)&Q(dimensions__4=custom_dimension_)&Q(reportRequestId=report_request_id_)&Q(partnerId=partner_id_)).order_by('-id').limit(60)
for data in mong_data: # <------------ bu foreach
print(data.value)
Verilerinizin ne içerdiğini bilmiyorum, buna göre iki tane öneride bulunabilirim. Birincisi gelen verileriniz sıralı ve bir sayı listesi ise, arama yapmak için “binary search” algoritmasını kullanabilirsiniz. Örneğin 100.000 tane sayıda arama yaparsanız
log2(100.000) = 16,6096404744368
adımda bitecektir. Peki nerden geliyor? Bu algoritmanın çalışma mantığından.
Bu muhtemelen işe yaramaz. Çünkü Python’da GIL (Global Interpreter Lock) var. Bu sistem sebebiyle threading ile farklı işlemcileri kullanmak mümkün değil. Ancak subprocess ile işletim sistemi seviyesinde thread’ler kullanılarak bu başarılabilir.
Yardımlarınız için teşekkürler. Şimdi MongoEngine querysinden gelen data MongoObject tipinde.
Tüm objeleri bir liste atıyorum ve bu listi foreach ile açınca sorun olmuyor çok hızlı bir şekilde sonuç alıyorum.
Fakat objelerin içine erişmek istediğimde yani tüm objeleri tutan listin içinede bir foreach açınca oldukça yavaşlıyor.
Bu konuda size ancak link vererek yardımcı olabilirim. for döngüsü içerisinde yaptığınız işlemler de hıza etki ediyor. Kodunuzu tekrar inceleyip, gerekirse yavaşlattığını düşündüğünüz kısımları yeniden düzenlemeli ve varsa bunların alternatiflerini aramalısınız. Aşağıya birkaç link bırakacağım. Umarım işinizi görür.