2014-05-04 16 views
5

Mam użytkownika, zajęcia, zajęcia ze zdjęć. Gdzie użytkownik lubi innych użytkowników Załączony zrzut ekranu klasy działalności https://dl.dropboxusercontent.com/u/33860877/Activity.pngZapytanie o limit wartości PFQuery

Mój problem polega na tym, że gdy użytkownik lubi więcej niż 1000, ograniczenie zapytania "filtr lubi" spowoduje poniższą metodę, aby uzyskać użytkowników, których użytkownik już lubi, ponieważ liczba działań (polubień) powyżej 1000. Co należy zrobić, aby tego uniknąć?

-(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

czy to rozwiązałeś? – Ilario

Odpowiedz

0

Musisz obliczyć 1000 rekordów.

Jeśli dobrze Cię rozumiem, chcesz pokazać zdjęcia, które bieżący użytkownik NIE ZOSTAŁ PODOBNY. Twoje rozwiązanie nie jest wydajne, ponieważ porównujesz klucz w zapytaniu o 1000 obiektów (lub, jeśli limit nie był 1000, twoje rozwiązanie prawdopodobnie musiałoby porównać tysiące obiektów).

Jeśli chcesz odfiltrować lubiane zdjęcia, możesz zamiast tego przechowywać tablicę identyfikatorów obiektów na użytkowniku. Gdy użytkownik lubi zdjęcie, można dodać ten objectId do tablicy w obiekcie User lub innego obiektu związanego z użytkownikiem. Następnie, w zapytaniu, możesz porównać z tą tablicą, a nie z innym zapytaniem:

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

jak to jest skuteczne rozwiązanie? przypuśćmy, że mówimy o instagramie. Każdy użytkownik ma 1000 podobieństw i proponujesz przechowywać je w tablicy? wtedy musisz albo posortować tę tablicę (spróbuj nauczyć Parse robiąc to) i mieć nadzieję, że notContainedIn: arrayOfLikedObjectIds skorzysta z posortowanej tablicy, albo otrzyma ogromną karę za wydajność. Nie znam dobrego rozwiązania, ale wygląda na to, że porównanie dwóch tabel na zapleczu powinno być dość wydajne, ponieważ prawdopodobnie nie są one wspierane przez tablicę. –

Powiązane problemy