2016-07-01 2 views
3

현재 응용 프로그램을 영역으로 마이그레이션하고 데이터를 연계로 정리하는 최선의 방법을 알아 내려고합니다. 이 질문에 대해서는 내 데이터 모델의 Photo 개체에 초점을 맞 춥니 다. getPopular(), getNearbyPhotos(lat, lng), getUserPhotos(userId), getAlbumPhotos(albumId), getCollection(type) :목록에 안드로이드 영역 데이터 정리

내 모든 데이터 객체는 다음과 같은 엔드 포인트와의 API에서 도착합니다. 이 끝점의 대부분에는 sort=best/chronological과 같은 추가 매개 변수가 있습니다.

우리는 현재 listName만을 사용하여 객체 목록을 정렬 및 검색 할 수있는 프로젝트에 this non-relational DB을 사용하고 있습니다. 우리는 을 endpoit + 매개 변수의 조합으로 사용합니다. 모든 데이터가 로컬로 사용할 수 있지만 여기에 문제가 그 쿼리에 대한 데이터가 많이 있다는 것입니다 때 잘 작동

realm.where(User.class) 
    .contains("name", "Doe") 
    .findAll(); 

: (관계형 DB 등)

영역처럼, 표준 쿼리를 사용 서버 측에서 유지되고 클라이언트로 전송되지 않습니다. 예를 들어 Photo 모델에는 위치가 포함되지 않으며 best 정렬 점수가 포함되지 않습니다. id 낭포 I과 실제 API 엔드 포인트 및 매개 변수를

public class ListPhoto extends RealmObject { 
    @PrimaryKey public String id; 
    public RealmList<Photo> list; 
} 

및 사용 : 내 현재 테스트 프로젝트에

, 나는 우리의 현재 프로젝트가 같은 개체를 사용하는 것에 ListPhoto 비슷한을 만들어 그 주위에 일하고 있어요 '간단하게 그룹화 나는 행복하지 않다 메타 데이터를 주문 저장하는 간단한 쿼리

ListPhoto listPhoto = realm 
      .where(ListPhoto.class) 
      .equalTo("id", id) 
      .findFirst(); 

하지만 그 접근 방식으로 내가 추상화의 추가 레이어를 만드는거야와 해당 개체를 찾을 수 있어요 내가 여기 물어 :

어떻게 내가 쌓아 놓은이 더러운 해킹을 사용하지 않고 삽입 된 순서와 그룹에 기초하여 영역의 데이터를 쿼리 할 수 ​​있습니까?

편집 : 그것

후속 질문 : Query realm data contained on other object

+0

로컬로 사용할 수없는 필드에 대해 쿼리를 수행 할 수 있으므로 확실하지 않습니다. 사진에 위치/점수 필드가없는 이유는 무엇입니까? 나는 그들이 서버에서 할 수 있다고 상상한다. –

+0

@ TimCastelijns 정확하게, 그들은 서버에 가지고있다. 그러나 시각적으로 사용자에게 표시되지 않는 데이터이기 때문에 클라이언트로 전송되지 않습니다 (저는 Realm으로 마이그레이션하고 싶지만 서버 측 데이터 모델과 endpoit 비헤이비어를 변경하지 않고도 수행하는 것이 좋습니다) – Budius

답변

1

그러나 시각적으로 사용자에게 제공되지 않습니다 데이터이기 때문에,이 클라이언트로 전송되지 않습니다 (내가 좋아하는 것 Realm으로 마이그레이션 할 수는 있지만 서버 측 데이터 모델을 변경하거나 동작을 끝내지 않고도 수행하는 것이 좋습니다.)

가iful지만 이해할 수 있습니다. 당신이 할 수있는 일

당신은 지금 당신이 API 엔드 포인트 및 매개 변수를 사용하여 서버를 조회하여 영역 사진은 다음

public class Photo extends RealmObject { 
    // other fields 

    private double latitude; 
    private double longitude; 
    private String score; 
} 

처럼, 어쨌든 필드 개체를 제공합니다.

결과가있는 경우 영역에 저장하고 lat/long/score에 값을 할당합니다. 서버 쿼리에서 방금 사용했기 때문에이 시점에서 사용할 수 있습니다.

그래서 당신은 api/getNearbyPhotos(1, 2)?sort=best를 조회하는 경우 :
(의사 코드)

api.fetch("getNearbyPhotos(1, 2)?sort=best", new GetPhotoCompleteListener { 
    @Override 
    void onSuccess(List<Photo> photos) { 
     // assuming gson or something has already parsed the server response into photo objects 
     for (Photo p : photos) { 
      p.setLatitude(1); 
      p.setLongitude(2); 
      p.setScore("best"); 
     } 
     realm.copyToRealmOrUpdate(photos); 
    } 
} 

이제 서버에 그랬던 것처럼 같은 방법으로 조회 할 수 있습니다 영역에서 사진 개체의 무리가 있습니다.

+0

필자는 이것을 옳은 것으로 표시하고 있습니다. Realm의 작동 방식을 올바르게 지적하고 다른 솔루션을 지적하기 때문입니다. 하지만 API 세부 정보 중 일부를 더 깊이 파헤쳐 야 할 것이며 실제로 이와 같이 사용할 수 있을지 확신 할 수 없습니다. 예를 들어,'getNearby()'나는 현재 lat/lng를 넣을 수 없다. 왜냐하면 사용자가 사진을 옆쪽으로 10 미터 정도 움직이면 절대 값으로 인해 결과에 나타나지 않기 때문이다. – Budius