2011-04-14 52 views
4

FlockDB提供了一種非常好的社交圖建模方法:系統中只有兩個實體,User和Friendship。其中用戶表示圖形的頂點,友誼表示兩個用戶之間的邊緣。就像這樣:如何在Google App Engine中爲像flockDB這樣的社交圖建模

用戶(ID,名字,姓氏,birth_data,registration_timestamp)

友誼(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) 

回答

0

一個方法是將模型是這樣的:

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

這將是一個簡單的模型來表示用戶和朋友。但我認爲這將有兩個disadvatnages:

  1. 因爲友誼是不是一個實體,我們不能將因爲現在集合保持性能,它
  2. ,我沒有知道它有多快會像提取朋友的朋友一樣查詢。
0

而不是db.Key()(這是一個值,而不是屬性類),請使用db.ReferenceProperty(User)

相關問題