0

私たちはGAEを使用してソーシャルネットワークを作成しています.ユーザーを作成するときは、facebook、twitterなどに関する連絡先のデータを保存する必要があります...

この余分な連絡先データは管理者が管理できる必要があるため、管理者が「Whatsapp」を追加した場合、すべてのユーザーにオプションの「Whatsapp」フィールドを表示する必要があり、管理者が Facebook データを削除した場合は、すべてのユーザーの Facebook 情報を削除する必要があります。

たとえば、すべてのユーザーの facebook を取得する、すべてのユーザーの twitter を削除するなど、管理者が最も効率的な方法を考慮して、このデータを保存するための最良のオプションは何ですか?

ありがとう

4

2 に答える 2

2

この問題を解決するには多くの方法があります。1つは、(Pythonを想定)などの構成モデルを持つことです...

class Config(db.Model):
  """ singleton model """
  twitter  = db.BooleanProperty(default=False)
  facebook = db.BooleanProperty(default=False)
  whatsapp = db.BooleanProperty(default=False)

そして、ソーシャルユーザー名ごとにプロファイルモデルの個別のフィールド...

class Profile(db.Model):
  name = db.StringProperty()     # users name
  twitter = db.StringProperty()  # store twitter username here
  facebook = db.StringProperty() # store facebook username here
  whatsapp = db.StringProperty() # store whatsapp username here

プロファイルをクライアントにレンダリングするときは、Config クラスをチェックして、有効になっているソーシャル フィールドを確認し、それらのフィールドのみをレンダリングします。

削除を処理するには、cron ジョブを作成してすべてのプロファイルを反復処理し、構成モデルで無効になっているデータを削除する必要がある場合があります。

お役に立てれば

于 2012-04-23T13:21:25.037 に答える
0

ユーザー固有のデータを含むすべてのエンティティは、必ずユーザーのエンティティ グループに格納する必要があります。これにより、非祖先クエリよりも優れたパフォーマンスを発揮する祖先クエリを使用して、これらのエンティティを取得および操作できます。

詳細エンティティをユーザーのエンティティ グループの一部にするには、parentパラメーターを使用してそれらを作成するだけです。例えば:

class TwitterData(db.Model):
    twitter_name = db.StringProperty

def addTwitterData(user, twitter_name):
    # User is an instance of users.User
    new_twitter_entity = TwitterData(parent=user)
    new_twitter_entity.twitter_name = twitter_name
    new_twitter_entity.put()

これで、次のようにユーザーのデータを取得できます。

twitter_accounts = TwitterData.all().ancestor(user).fetch(1000)

また、種類のない祖先クエリを使用して、ユーザーのエンティティ グループ内のすべてのエンティティを取得できます。

all_networks = db.Query()
all_networks.ancestor(user).fetch(1000)
# Now, ancestor has all of user's Twitter, Facebook, Myspace accounts.

このアプローチの強みの 1 つは、ユーザーがさまざまなサービスのいずれかで複数のアカウントを持つことができることです。

さまざまなソーシャル サイト用に保存する必要があるデータが多すぎて単一の単純なモデルで提供できない場合は、Expandoクラスを使用して、さまざまな種類のデータを保存するエンティティを保存できます。

于 2012-04-23T13:40:21.980 に答える