2014-05-04 20 views
5

Tôi có lớp người dùng, hoạt động, ảnh. Nơi người dùng thích những người dùng khác Ảnh chụp màn hình đính kèm của Lớp Hoạt động https://dl.dropboxusercontent.com/u/33860877/Activity.pngTruy vấn giới hạn PFQuery

Vấn đề của tôi là khi người dùng thích hơn 1000, giới hạn truy vấn "bộ lọc thích" sẽ gây ra phương pháp dưới đây để người dùng mà người dùng đã thích vì số hoạt động (thích) hơn 1000. Cần làm gì ở đây để tránh điều này?

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

bạn đã giải quyết vấn đề này chưa? – Ilario

Trả lời

0

Bạn cần làm việc xung quanh giới hạn kỷ lục 1000.

Nếu tôi hiểu chính xác bạn, bạn muốn hiển thị ảnh mà người dùng hiện tại KHÔNG ĐƯỢC YÊU THÍCH. Giải pháp của bạn không hiệu quả, khi bạn so sánh một khóa trong truy vấn 1000 đối tượng (hoặc, nếu giới hạn không phải là 1000, thì giải pháp của bạn có lẽ sẽ cần so sánh hàng nghìn đối tượng).

Nếu bạn cần lọc ra các ảnh ưa thích, thay vào đó bạn có thể lưu trữ một mảng các objectID trên người dùng. Khi người dùng thích ảnh, bạn có thể thêm đối tượng nàyId vào mảng trên đối tượng Người dùng hoặc đối tượng khác được gắn với người dùng. Sau đó, trong truy vấn của bạn, bạn có thể so sánh với mảng này thay vì truy vấn khác:

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

giải pháp này hiệu quả như thế nào? giả sử chúng ta đang nói về instagram. Mỗi người dùng có 1000 lượt thích và bạn đang đề xuất lưu trữ chúng trong một mảng? sau đó bạn cần phải sắp xếp mảng này (hãy thử dạy Parse làm điều này) và hy vọng rằng notContainedIn: arrayOfLikedObjectIds sẽ được hưởng lợi từ một mảng được sắp xếp, hoặc có một hiệu suất rất lớn. Tôi không biết một giải pháp tốt, nhưng nó có vẻ như so sánh hai bảng trên một phụ trợ nên được khá hiệu quả kể từ khi những người có lẽ không được mảng hỗ trợ. –

Các vấn đề liên quan