2

Twitterによく似たサイトを作ろうとしています。ユーザーはメッセージを投稿できるようになります。また、ユーザーは相互に「フォロー」できるようになります。ホームページでは、フォローしているユーザーからのメッセージが時間順に並べられて表示されます。

このための appengine モデルを作成するにはどうすればよいですか?

従来のリレーショナル DB では、次のようになると思います。

データベース「ユーザー」:

  • ID
  • ユーザー名

データベースは「続きます」:

  • ユーザーID
  • follow_id

データベース「メッセージ」:

  • ユーザーID
  • メッセージ

クエリは次のようになります。

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

上記の例で明確だったと思います。これを Google App Engine で複製するにはどうすればよいですか?

4

2 に答える 2

4

少し前の Google I/O で、Brett Slatkin による有用なプレゼンテーションがあり、スケーラブルな Twitter のようなマイクロブログ アプリの構築について説明し、まさにこの質問を詳細に扱っています: http://www.google.com/events/io/ 2009/sessions/BuildingScalableComplexApps.html

于 2011-06-07T21:15:07.487 に答える
1

改訂:

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()  

次に、次の 2 つの手順で結果をクエリします。

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' エンティティです)

于 2011-06-08T00:19:49.123 に答える