내 앱에서 사용자는 다른 사용자를 팔로우하고 소식을받는 사용자가 활동을 수행 할 때마다 업데이트를받을 수 있습니다.AppEngine의 데이터 저장소 모델 구조를 따릅니다 - 날짜순 팔로워 주문
나는이 방법으로 추적 관계를 저장 :
class User(db.Model):
''' User details '''
username = db.StringProperty()
class Contacts(db.Model):
'''Store users contacts
parent= User (follower)
key_name= Users username (follower)
contacts = A list of keys of Users that a User follows '''
contacts = db.ListProperty(db.Key)
last_updated = db.DateTimeProperty(auto_now=True)
얻기 추종자, 그리고 사용자를 사용자가 따른다고 (추종자 &은 다음) :
'''Get Users that my_user follows'''
my_user = User().all().fetch(1)
contacts = Contacts.get_by_key_name(my_user.username).contacts
''' get my_user followers - copied from an answer here on stackoverflow '''
follower_index = models.Contacts.all(keys_only=True).filter('contacts =',my_user)
follower_keys = [f.parent() for f in follower_index]
followers = db.get(follower_keys)
그래서, my_user 추종자를 주문하려면 (나는 위의 모델에서 추적하지 않습니다) 따라하지만, 나는 그것을 할 수있는 가장 좋은 방법은 무엇인지 모르겠습니다.
1) 대신 연락처의 현재 구조 (db.Model)는 "다리"모델을 사용합니다 : 난 아직도 파악해야, 그러나
class Contacts(db.Model):
follower = db.ReferenceProperty(User)
following = db.ReferenceProperty(User)
date_created = db.DateTimeProperty(auto_now_add=True)
을 여기에 내가 생각할 수있는 옵션이 있습니다 follower = user1, following = user2는 반복해서는 안됩니다. 내가 생각한 내 쿼리에 2 개의 필터를 적용하면 그렇게 할 수 있습니다.
2) 현재의 모델 구조를 유지하는 대신 연락처 키들의리스트 (db.Model)를 갖는의 튜플 저장 [user_key는 DATE_CREATED] 다음과 같이
class Contacts(db.Model):
'''Store users contacts
parent= User (follower)
key_name= Users username (follower)
contacts = A list of Tuples: User.key(), date_created '''
contacts = db.StringListProperty()
last_updated = db.DateTimeProperty(auto_now=True)
을 그러나, 이는 방법 나는 연락처 목록을 처리해야합니다 : 를 - 나는 사용자 키를 추출해야하고 StringList (각 문자열에서 DATE_CREATED) - 그럼 내가 만든 날짜에 의해 사용자 키 목록을 주문할 수 있습니다
3) 마지막 솔루션 (분명히 효율적이지 않음) : 원본 db 구조를 유지하고 사용자가 별도의 모드로 활동을 저장합니다. l - 각 follow 작업은 date_created 필드와 별도로 저장됩니다. 이 테이블은 날짜별로 사용자 팔로어 목록을 주문할 때만 사용하십시오.
Class FollowNewsFeed(db.Model):
''' parent = a User follower'''
following = db.ReferenceProperty(User)
date_created = db.DateTimeProperty(auto_add_now=True)
이 처리하는 가장 좋은 방법에 어떤 통찰력
매우 감사합니다 :) 을 다음과 같이 FollowNewsFeed()에 연락처 하나의()와 다른 - 물론 이것은 내가 두 데이터 저장소 둔다을 다하겠습니다 것을 의미한다감사합니다.
내가보다는 자신의 목표에 대한 사용자의 목록 매핑 모델을 사용
감사합니다. 흥미 롭습니다 - 하위 쿼리 제한을 생각하지 않았습니다. 그것은 제가 알아서해야 할 또 다른 문제입니다. 특히 언급 한대로 결과 집합을 날짜별로 정렬해야하기 때문에 사용자에게 표시하기 전에 모든 목록을 하나의 목록으로 정리해야합니다. – yasser
개인적으로 나는 ajax를 사용하여 데이터를 가져온다. 지난 7 일간의 업데이트 또는 20 일간의 업데이트로 최대 30 일간의 여행으로 나눕니다. 그런 다음 자바 스크립트를 통해 결과를 표시하고 주문하십시오. 사람 프로필/메시지 목록에 아약스를 사용하지 않도록하십시오. 원하는 경우 Google에서 색인을 생성 할 수 있습니다. – Matt
은 (1) 사용자 연락처 목록 가져 오기 (2) 목록을 20 개의 연락처 목록으로 분리하여 연락처 목록 가져 오기 (3) 연락처 목록에서 업데이트 가져 오기, 연락처 이름으로 필터링 및 date_created (last 7 일) (4) 결과 목록이 10 미만인 경우 다음 20 개의 연락처에서 결과를 가져와 목록에 여전히 업데이트가 10 개 미만인 경우 업데이트 목록에 추가합니다 (5), 다시 시작하고 날짜 간격을 확장합니다 (과거의 업데이트를 가져옵니다 14 일 대신에 ..).이 혼란 대신에, 어쩌면 나는 하위받은 편지함을 피하기 위해 모든받은 편지함에 모든 업데이트를 저장해야합니다. 나는 많은 글을 쓸 것입니다. -/ – yasser