python-如何在appengine中为关注者流建模?

我正在尝试设计表格以建立追随者关系.

假设我有一个140char记录流,其中包含用户,主题标签和其他文本.

用户关注其他用户,也可以关注主题标签.

我在下面概述了我的设计方式,但是我的设计有两个局限性.我想知道其他人是否有更聪明的方法来实现相同的目标.

问题是

>复制每条记录的关注者列表
>如果添加了一个新关注者或删除了一个关注者,则“全部”
记录必须更新.

编码

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)

有更聪明的方法吗?

解决方法:

您要解决的问题称为扇出问题.

Google App Engine团队的Brett Slatkin讲了一个有效/可扩展的解决方案,以解决App Engine上的扇出问题.您可以在此处找到演讲的视频:

http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html

上一篇:python – NDB .order返回一个空结果


下一篇:python-使用PySide2在QTableView中设置文本样式