2013-12-22 50 views
1

我有兩個類:如何檢查GAE NDB中的記錄是否存在?

class User(ndb.Model): # key is user's email 
    phone = ndb.IntegerProperty(indexed=False) 
    ... 

class Question(ndb.Model): 
    user = ndb.KeyProperty(kind=User) 
    ... 

,並使用下面的代碼對用戶的問題,添加到數據存儲:

q = Question() 
... 
user = User.get_by_id(email) 
if user: 
    q.user = ndb.Key(User, email) 

(問題可能由未知用戶加入)

我做它正確嗎?我應該以某種方式優化代碼(使用keys_only?)以減少讀取/寫入NDB操作的數量?

+0

我想你是對的。既然你基於用戶的電子郵件是關鍵,那麼你只能使用密鑰。其他那些我在這裏看不到任何優化。 –

+0

@JimmyKane,當我做'get_by_id'不會返回(=讀取)整個實體? –

+0

是的。所以只能放在那裏。 –

回答

0

用戶是否已經登錄?如果是,那麼你可以將用戶密鑰存儲在會話中並省略get_by_id。

除此之外,get_by_id非常高效,但如果用戶實體很大,您應該考慮將其拆分(因爲提取較小的實體更便宜)。關於get_by_id的另一個很酷的事情是,它將首先使用memcache,如果實體不在memcache中,則使用數據存儲。如果用戶詢問很多問題,那麼實體可能會在memcache中。