2014-02-26 1 views
0

현재 구조적으로 twitter/jaiku/reddit와 비슷한 애플리케이션을 설계 중입니다. 근본적으로 upvotes와 downvotes와 함께 작은 지위가있다. 그리고 그들은 reddit와 같은 점수와 시간에 의해 분류된다.게시물을 appengine에서 읽은 상태로 표시

나는이 모든 것을 작동 시켰지만 지금은 우리의 요구 사항이 조금 바뀌었고 사용자는 게시물을 '읽음'으로 표시 할 수 있어야합니다. 이렇게하면 해당 사용자의 피드에 더 이상 게시물이 표시되지 않습니다. 나는 (User, Post)의 각 튜플에 대해 Read 엔티티로 이것을 모델링 할 수 있지만,이 테이블에 '존재하지 않는'게시물을 찾으려면 많은 작업이 필요합니다. 또는 읽지 않은 각 게시물에 대해 하나의 엔티티를 가질 수 있도록 그 관계를 뒤집을 수 있으며 테이블에 'do'라는 게시물이 있는지 쉽게 찾을 수 있습니다.하지만이 테이블에 항목을 만들어야합니다. 게시물이 만들어 질 때마다 모든 단일 사용자. 이것은 잘 확장되지 않을 것입니다.

내 질문은 다음과 같습니다. appengine의 데이터 저장소에서 이러한 종류의 부정적인 정보를 어떻게 모델링 할 수 있습니까? 그게 중요하다면 go 런타임을 사용하고 있지만 런타임에 대한 대답은 괜찮습니다.

답변

0

이것은 다 대다 관계입니다. This article은 many-to-many를 포함하여 다른 종류의 관계를 모델링하는 방법을 설명합니다. 유일한 문제는 나에게 날씨에 대해 사용자가 읽은 게시물 목록이나 게시물을 읽은 사용자 목록을 포스트에 저장해야한다는 것이 확실하지 않다는 것입니다. 포이 목록은 여러 상황에서 커질 수 있기 때문입니다. 게시물이 상대적으로 비공개이며 많은 사람들이 볼 수없는 경우 포스트 모델에 사용자 키 목록을 저장할 수 있습니다. 그러나 수천 명의 사용자가 한 개의 게시물을 볼 수 있다면 수천 개의 게시물을 읽는 사용자가 많지 않으므로 사용자에게 게시물 목록을 저장하는 것이 좋습니다. 또 다른 옵션은 이전 게시물을 버리거나 읽기 상태를 삭제하는 것입니다.

+0

오케이. 인덱스 된 속성 제한으로 인해 5000 개 요소로 제한됩니다. 쿼리에서 어떻게 사용합니까? IN 연산자는 한 번에 30 개 요소로 제한됩니다. – Logiraptor

+0

지금 내 대답 업데이트 – bigblind

+0

이 질문에 대한 Guido Vanrossum의 대답을 읽은 후에 실제로 내 대답이 더 이상 유효하지 않은 것 같습니다. http://stackoverflow.com/questions/15377119/gae-ndb-design-performance-and-use -of-repeated-properties, 그가 ndb, 파이썬 데이터 저장소 api에 대해 이야기하고 있다고하더라도, 이것은 반복 속성이 두포에서 처리되는 방식에 관한 것이라고 생각합니다. – bigblind

관련 문제