2014-05-04 7 views
5

Kullanıcım, etkinliğim, fotoğraf sınıfım var. Kullanıcının diğer kullanıcılardan hoşlandığı yer Eklenti Ekran görüntüsü https://dl.dropboxusercontent.com/u/33860877/Activity.pngPFQuery Limit Sorgu

Sorunum, bir kullanıcı 1000'den fazlayı aştığında, "filtre beğenme" sorgusundaki sınırlamanın, kullanıcının zaten beğendiği kullanıcılara ulaşma yönteminin altında olmasına neden olacağıdır. 1000'den fazla aktivite (beğenme) sayısı. Bundan kaçınmak için ne yapılmalı?

-(void) loaddata { 

PFQuery *filterUsers = [PFUser query]; 
[filterUsers whereKey:kMUParseUserAccountStatus equalTo:@"Active"]; 
filterUsers.limit =1000; 


PFQuery *filterLikes = [[PFQuery alloc] initWithClassName:kMUActivityClassKey]; 
[filterLikes whereKey:kMUActivityUserFromKey equalTo:[PFUser currentUser]]; 
filterLikes.limit =1000; 


PFQuery *query = [[PFQuery alloc] initWithClassName:kMUPhotoClassKey]; 
[query whereKey:kMUPhotoUserKey notEqualTo:[PFUser currentUser]]; 
[query whereKey:kMUPhotoPicturePriorityKey equalTo:@(0)]; 
[query whereKey:kMUPhotoUserKey matchesQuery:filterUsers]; 
[query whereKey:kMUPhotoUserKey doesNotMatchKey:kMUActivityUserToKey inQuery:filterLikes]; 
[query includeKey:kMUPhotoUserKey]; 

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    if(!error) 
    { 

     if(objects.count>0) 
     { 


      [self updateInformation]; 

     } 


     else 
     { 
      if(objects.count==0) 
      { 
       self.hasMorePhotos = false; 
      } 

     } 
    } 


}]; 
} 
+0

bunu çözdünüz mü? – Ilario

cevap

0

1000 kayıt sınırını aşmanız gerekir.

Seni doğru anlıyorsam, geçerli kullanıcının YETKİLİ OLMADIĞINI fotoğrafları göstermek istersiniz. Çözümünüz, 1000 nesneden oluşan bir sorgudaki bir anahtarı karşılaştırdığınız için (ya da sınır 1000 değilse, çözümünüzün binlerce nesneyi karşılaştırmanız gerekebilir) verimli olmadığından etkin değildir.

Beğenilen fotoğrafları filtrelemeniz gerekiyorsa, kullanıcıya bir dizi objectID yerleştirebilirsiniz. Kullanıcı bir fotoğrafı beğendiğinde, bu objectId öğesini User nesnesindeki bir diziye veya kullanıcıya bağlı başka bir nesneye ekleyebilirsiniz. Daha sonra, sorgunuzda, başka bir sorgu yerine bu diziyle karşılaştırabilirsiniz:

[query whereKey:@"objectId" notContainedIn:arrayOfLikedObjectIds]; 
+0

Bu çözüm nasıl etkilidir? instagram hakkında konuştuğumuzu varsayalım. Her kullanıcının 1000'den fazla beğenisi var ve bunları bir dizide saklamayı mı planlıyorsunuz? o zaman bu diziyi sıralamanız gerekir (Parse'yi öğretmeyi deneyin) ve umarım notContainedIn: arrayOfLikedObjectIds sıralı bir diziden faydalanacak ya da büyük bir performans cezası alacak. İyi bir çözüm bilmiyorum ama bir arka uçtaki iki tabloyu karşılaştırmak, muhtemelen dizili destekli olmadıklarından oldukça verimli olmalı. –