我们使用GAE做一个社交网络,而当我们要创建用户,我们需要保存联系人的有关Facebook,微博等数据......保存额外的联系人数据的数据存储
这个额外的接触数据必须由管理员管理,因此如果管理员添加“Whatsapp”,则所有用户都必须出现“Whatsapp”字段,如果管理员删除了Facebook数据,则必须删除所有用户的Facebook信息。
保存这些数据的最佳选择是什么,考虑最有效的方式,例如,获取所有用户的脸书,删除所有用户的twitter ...由管理员?
谢谢
我们使用GAE做一个社交网络,而当我们要创建用户,我们需要保存联系人的有关Facebook,微博等数据......保存额外的联系人数据的数据存储
这个额外的接触数据必须由管理员管理,因此如果管理员添加“Whatsapp”,则所有用户都必须出现“Whatsapp”字段,如果管理员删除了Facebook数据,则必须删除所有用户的Facebook信息。
保存这些数据的最佳选择是什么,考虑最有效的方式,例如,获取所有用户的脸书,删除所有用户的twitter ...由管理员?
谢谢
有很多方法可以解决这个问题。其中之一是有一个配置模型,如(假设蟒蛇)...
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作业以迭代所有配置文件并删除配置模型上禁用的任何数据。
希望这有助于
你当然应该存储包含用户的实体组中的用户的特定数据的所有实体。这使您可以使用ancestor queries来检索和操作这些实体,它们的性能优于非祖先查询。
要使详细实体成为用户实体组的一部分,您只需使用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.
这种方法的优势之一是它允许您的用户在任何各种服务上拥有多个帐户。
如果您需要为不同的社交网站存储的数据太多而无法通过单个简单模型提供,则可以使用Expando类来存储存储不同类型数据的实体。