web应用程序-如何在谷歌应用引擎中建模社交图,如flockDB



FlockDB提供了一种非常好的社交图谱建模方法:系统中只有两个实体,User和Friendship。其中User表示图形的顶点,friendship表示两个用户之间的边。像这样:

User(id, first_name, last_name, birth_data, registration_timestamp)

友情(id, user1_id, user2_id, depth,其他友情参数…)

这种方法有很多优点

  • 你可以指定参数的友谊,如朋友,亲密的朋友,在一段关系
  • 你可以选择你的友谊是定向的还是非定向的

我的问题是如何实现这与谷歌AppEngine提供的数据存储。这是我的第一次尝试,但我不明白如何真正地为友谊实体分配密钥。

class User(db.Model):
  name = db.StringProperty()
  age = db.IntegerProperty()
  registeration_ts = db.DateTimeProperty(auto_now_add=True)
class FriendShip(db.Model):
  user1 = db.Key()   // key to some user in user1
  user2 = db.Key()   // key to some user in user2
  creation_ts = db.DateTimeProperty(auto_now_add=True)
  updated_ts = db.DateTimeProperty(auto_now_add=True)

一种方法是这样建模:

class User(db.Model):
 name = db.StringProperty()
 friends = db.SelfReferenceProperty(collection_name="subscribers")

这将是一个表示用户和好友的简单模型。但我认为它有两个缺点:

  1. 由于友谊不是实体,我们不能给它分配属性
  2. 因为现在维护了一个集合,我不知道它的查询速度有多快,比如获取朋友的朋友。

代替db.Key()(这是一个值,而不是属性类),使用db.ReferenceProperty(User)

最新更新