J'essaye de concevoir des tables pour construire une relation de suiveur. Dire que j'ai un flux de 140char enregistrements qui ont l'utilisateur, hashtag et autre texte.comment modéliser un flux suiveur dans appengine?
Les utilisateurs suivent d'autres utilisateurs et peuvent également suivre des hashtags.
Je suis en train de décrire la façon dont j'ai conçu ceci ci-dessous, mais il y a deux limites dans ma conception. Je me demandais si les autres avaient des moyens plus intelligents pour atteindre le même objectif.
Les questions à ce sujet sont
- La liste des disciples est copié dans pour chaque enregistrement
- Si un nouveau suiveur est ajouté ou supprimé un, « tous » les documents doivent être mis à jour.
Le code
class HashtagFollowers(db.Model):
"""
This table contains the followers for each hashtag
"""
hashtag = db.StringProperty()
followers = db.StringListProperty()
class UserFollowers(db.Model):
"""
This table contains the followers for each user
"""
username = db.StringProperty()
followers = db.StringListProperty()
class stream(db.Model):
"""
This table contains the data stream
"""
username = db.StringProperty()
hashtag = db.StringProperty()
text = db.TextProperty()
def save(self):
"""
On each save all the followers for each hashtag and user
are added into a another table with this record as the parent
"""
super(stream, self).save()
hfs = HashtagFollowers.all().filter("hashtag =", self.hashtag).fetch(10)
for hf in hfs:
sh = streamHashtags(parent=self, followers=hf.followers)
sh.save()
ufs = UserFollowers.all().filter("username =", self.username).fetch(10)
for uf in ufs:
uh = streamUsers(parent=self, followers=uf.followers)
uh.save()
class streamHashtags(db.Model):
"""
The stream record is the parent of this record
"""
followers = db.StringListProperty()
class streamUsers(db.Model):
"""
The stream record is the parent of this record
"""
followers = db.StringListProperty()
Now, to get the stream of followed hastags
indexes = db.GqlQuery("""SELECT __key__ from streamHashtags where followers = 'myusername'""")
keys = [k,parent() for k in indexes[offset:numresults]]
return db.get(keys)
Y at-il une façon plus intelligente de le faire?
Dupliquer http://stackoverflow.com/questions/2668470/good-way-of-implementing-a-twitter-like-followower-system –