Структура БД в Твиттере в Google App Engine - PullRequest
2 голосов
/ 07 июня 2011

Я пытаюсь создать сайт, который очень похож на Twitter.Пользователи смогут публиковать сообщения.И пользователи смогут «следовать» друг за другом.На домашней странице они видят сообщения пользователей, за которыми они следят, отсортированные по времени.

Как мне создать модели appengine для этого?

В традиционной реляционной БД, я думаю,это будет что-то вроде этого:

База данных 'user':

  • id
  • username

База данных 'следует':

  • user_id
  • follow_id

База данных 'messages':

  • user_id
  • message

И запрос будет выглядеть примерно так:

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

Полагаю, с приведенным выше примером все понятно.Как мне повторить это в Google App Engine?

Ответы [ 2 ]

4 голосов
/ 08 июня 2011

Некоторое время назад в Google I / O была полезная презентация Бретта Слаткина, в которой рассказывается о создании масштабируемого приложения для микроблогов, похожего на твиттер, и подробно рассматривается этот вопрос: http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html

1 голос
/ 08 июня 2011

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, соответствующей вашему активному пользователю)

...