2015-05-30 16 views
8

Tôi đang xây dựng ứng dụng đầu tiên của mình bằng chương trình phụ trợ.Số lượng cuộc gọi giới hạn khi sử dụng Parse

thông tin chung

Ứng dụng cho phép người dùng tải lên một nơi, gắn thẻ với nó, hình ảnh, vv

DBS

Tôi đang sử dụng Realm như một ẩn Db & Parse.com dưới dạng Db trực tuyến.

Ví dụ

Tôi đang xây dựng mô hình cơ sở dữ liệu và cố gắng để liên kết tất cả các mối quan hệ nhiều-nhiều. Ví dụ: Một địa điểm có một số thẻ (chuỗi ngắn), một thẻ có thể có một số địa điểm.

Để xây dựng này, tôi đã làm điều này với lĩnh vực: 1. Làm cho đối tượng chỗ 2. Đối với mỗi thẻ nhất định, làm cho một đối tượng thẻ và thêm các mối quan hệ nơi đối tượng 3. Lấy đối tượng diễn ra và thêm các đối tượng thẻ quan hệ

Bây giờ tôi có thể nhận tất cả các thẻ từ một nơi, khi tôi có đối tượng địa điểm. Tôi có thể nhận tất cả các địa điểm thuộc về đối tượng thẻ.

Tôi đang tạo phiên bản trực tuyến với Parse ngay bây giờ và nhận ra rằng cách tiếp cận này sẽ dẫn đến nhiều cuộc gọi.

giải pháp có thể

  • Đừng thêm mối quan hệ đối tượng từ khóa để mối quan hệ diễn ra (bước 3) thay vào đó, truy vấn các lớp thẻ cho mối quan hệ với vị trí đối tượng. (có thể rất chậm?)
  • Có cách nào để xây dựng mô hình 'ngoại tuyến' và đẩy toàn bộ mô hình không?

Vì tôi là người mới đối với loại logic này, tôi hy vọng câu hỏi là rõ ràng. Tôi hiểu nó rộng, nhưng tôi nghĩ tốt nhất là giải thích tổng số trường hợp.

Trả lời

4

Có một số cách để thực hiện nhiều mối quan hệ trong Phân tích cú pháp. Bạn có thể sử dụng mảng hoặc mối quan hệ tùy thuộc vào số lượng các đối tượng liên quan. Bạn có thể đọc thêm trong Parse's documentation.

Trong quan hệ Parse, bạn có thể thêm nhiều đối tượng vào mối quan hệ trước khi thực hiện cuộc gọi. Hãy để tôi lấy ví dụ Sách và Tác giả trong tài liệu và điều chỉnh nó cho trường hợp của bạn. Quá trình này là:

  1. Hãy đối tượng Nơi
  2. Kiểm tra nếu một đối tượng thẻ là tồn tại. Tạo một cái nếu không.
  3. Associate thẻ đối tượng với vị trí đối tượng trong một Relation Parse

Đây là mẫu mã:

// let’s say we have a few objects representing Place tags 
ParseObject tagOne= 
ParseObject tagTwo = 
ParseObject tagThree = 

// now we create a place object or specify the one you want to update 
ParseObject place= new ParseObject("Place"); 

// now let’s associate the tags with the place 
// remember to create a "tags" relation on Place 
ParseRelation<ParseObject> relation = place.getRelation("tags"); 
relation.add(tagOne); 
relation.add(tagTwo); 
relation.add(tagThree); 

// now save the book object 
book.saveInBackground(); 

EDIT AS COMMENT DƯỚI

Nếu bạn muốn tìm tất cả các địa điểm bằng một thẻ nhất định, bạn có thể làm như:

ParseObject tag = .... 
ParseQuery<ParseObject> query = ParseQuery.getQuery("Place"); 
query.whereEqualTo("tags",tag); 
+0

Nhưng sau đó tôi sẽ không thể lấy đối tượng thẻ và tìm các địa điểm được liên kết. Ngoài ra kiểm tra là thẻ tồn tại là một cuộc gọi cho mỗi thẻ? – TomCB

+0

Bạn vẫn có thể thực hiện truy vấn để tìm tất cả các địa điểm bằng một thẻ nhất định. Có một ví dụ trong tài liệu (Xem ví dụ của tôi ở trên). Để kiểm tra thẻ, cũng có một số cách, nhưng tôi nghĩ bạn có thể thêm một trường trong cơ sở dữ liệu Realm của bạn cho biết rằng thẻ đã được thêm vào Parse chưa. Nó có thể là một trường String với objectId. – Ralphilius

+0

Đó là một phần của câu hỏi của tôi: thực hiện một truy vấn để tìm địa điểm với thẻ đã cho, sẽ tốt hơn sau đó đặt mối quan hệ "địa điểm" khỏi đối tượng thẻ? – TomCB

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