Google App Engine中的Twitter-ish数据库结构

时间:2011-06-07 17:51:24

标签: google-app-engine gql gqlquery

我正在尝试创建一个与Twitter非常相似的网站。用户将能够发布消息。用户将能够“跟随”彼此。在主页上,他们会看到他们关注的用户发送的消息,按时间排序。

如何为此创建appengine模型?

在传统的关系数据库中,我猜它会是这样的:

数据库'用户':

  • ID
  • 用户名

数据库'跟随':

  • USER_ID
  • follow_id

数据库'消息':

  • USER_ID
  • 消息

查询将类似于:

SELECT * FROM messages m, follows f WHERE m.user_id = f.follow_id AND f.user_id = current_user_id

我想上面的例子我很清楚。如何在Google App Engine中复制此内容?

2 个答案:

答案 0 :(得分:4)

一段时间以来,谷歌I / O上有一个有用的演示文稿,描述了构建可扩展的类似Twitter的微博应用程序,并详细讨论了这个问题:http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html

答案 1 :(得分:1)

REVISED:

class AppUser(db.Model):
    user_id = db.UserProperty()
    username = db.StringProperty()
    following = db.ListProperty(db.Key) # list of AppUser keys

class Message(db.Model):
    sender = db.ReferenceProperty(AppUser)
    body = db.TextProperty()  

然后,您将分两步查询结果:

message_list = []
for followed_user in current_user.following:
    subresult = db.GqlQuery("SELECT __key__ FROM Message WHERE sender = :1", followed_user)
    message_list.extend(subresult)

results = Message.get(message_list)

('current_user'是与您的活跃用户对应的'AppUser'实体)