FlockDB提供了一种很好的建模社交图的方法:系统中只有两个实体,即User和Friendship。其中“用户”表示图的顶点,“友谊”表示两个用户之间的边。像这样:

用户(ID,名字,姓氏,生日数据,注册时间戳记)

友谊(id,user1_id,user2_id,深度,其他友谊参数...)

这种方法有很多优点


您可以在关系中为朋友,密友等友谊指定参数
您可以选择您的友谊是否定向。


我的问题是如何使用Google AppEngine提供的DataStore实施此操作。这是我的第一次尝试,但我不了解如何真正将键分配给友谊实体。

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


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


由于友谊不是实体,因此我们无法为其分配属性
因为现在维护了一个集合,所以我不知道像获取朋友之类的查询将有多快。

07-24 09:38
查看更多