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")
这将是代表用户和朋友的简单模型。但是我认为它将有两个缺点:
由于友谊不是实体,因此我们无法为其分配属性
因为现在维护了一个集合,所以我不知道像获取朋友之类的查询将有多快。