2012-02-16 2 views
1

Java/GAE에서 "다음"기능이있는 iPhone 응용 프로그램을 구현 중입니다. 이 기능은 사용자가 다른 사용자의 일정을 따라갈 수 있다는 점에서 Instagram과 유사합니다. 이벤트는 새로운 사진 게시, 사진 좋아하는 것, 다른 사용자를 따르는 것일 수 있습니다.GAE에서 효율적으로 "다음"기능 구현

두 개의 엔티티가 있습니다. Follow와 Event 모두 사용자 ID에 대한 참조가 있습니다.

그래서 우리는 대상 사용자의 이벤트를 나열 할 수있는 OR 쿼리를 사용하려고합니다. 그러나 GAE는 OR 쿼리를 지원하지 않으며 별도의 쿼리를 발행하면 쿼리 수가 상당히 많아 질 수 있으므로 비효율적입니다 (예 : 100+ 다음이 표준).

이 작업을 수행하는 일반적인 방법은 무엇입니까?

+0

당신은 허용되지 년대 OR 쿼리 목록을 수 있고, 별도의 질의 그것은 효율적이지? – MStodd

답변

1

관계형 모델에서 생각을 멈추어야합니다 ;-) 우리는 앱에서 비슷한 것을합니다. 후속 사용자 엔티티에서 추적중인 사용자에게 "등록"된 UID 목록을 보관하십시오. 사용자가 알림이 필요한 항목을 수행하면 사용자를 따르는 각 사용자에 대해 이벤트 엔터티를 만듭니다 (예, 인기있는 사용자가 전체 항목을 만들 수 있음, 이는 작업 대기열로 오프로드 될 수 있음).

사용자가 알림을 확인하면 UID로 가져올 수 있습니다. 색인이 생성되므로 매우 빠르게 반환됩니다. 이벤트를 가져올 때 이벤트를 삭제하거나 읽음으로 표시하십시오.

조인 및 기타 필터링 된 쿼리는 매우 느리지 만 대량의 인덱스 된 레코드를 가져 오는 것은 아닙니다. 많은 수의 레코드가 생성 될 경우 작업 대기열로 오프로드하십시오.

2

ListProperty을 구독자와 구독자 모두에게 사용합니다. 구독 한 사용자가 게시 할 때마다 작업을 사용하여 모든 구독자가 볼 항목을 추가합니다. Rick Mangi와 마찬가지로 관계형 모델은 데이터 저장소에 도움이되지 않습니다. 새 NDB API를 사용하는 경우 을 반복하여 속성을 사용할 수 있습니다. 모든 관찰자에 대한 엔티티를 작성하므로 비동기 API가 유용 할 수 있습니다.

1

Etsy는 공개 슬라이드 공유에서 설명한 모델을 구현하고 있습니다.

다음은 스키마 다이어그램입니다.

Etsy's Model

고도로 전체에 프리젠 테이션을 읽어 보시기 바랍니다.

Etsy Activity Feed Arch

+0

확실히 확인하겠습니다. 링크를위한 많은 감사합니다! –

+0

PubNub에서도 구독 이벤트 서비스를 찾아 볼 수 있습니다. 나는 사용자 가격을 지불하는 가격 모델의 팬이 아니지만. – tven