我的User
我想創建並存儲在數據存儲中的對象有一個email
和一個username
。在創建User
對象時,如何確保另一個User
對象不具有相同的email
或相同的username
?Google App Engine - 處理存儲對象的併發問題
如果我只是查詢是否有其他用戶已經使用過用戶名或電子郵件,那麼可能會出現競爭狀態。
更新: 我目前正在考慮的解決方案是使用MemCache來實現鎖定機制。在嘗試將User
對象存儲在數據存儲中之前,我會獲取2個鎖。首先鎖定基於email
鎖定,然後鎖定基於username
。
由於創建新的User
對象僅在用戶註冊時發生,而且更罕見的是兩個人嘗試使用相同的用戶名或相同的電子郵件,我認爲可以採用鎖定的性能命中。
我想使用的內存緩存鎖定代碼,這裏的:http://appengine-cookbook.appspot.com/recipe/mutex-using-memcache-api/
你們有什麼覺得?
你相信我能「這個用戶名讓用戶」進行查詢和「插入用戶使用該用戶名」在同一筆交易中?每個交易只能對一個實體組進行操作。做一個查詢你必須有一個祖先過濾器。 http://code.google.com/appengine/docs/python/datastore/transactions.html#What_Can_Be_Done_In_a_Transaction – Kyle 2010-04-08 22:03:21
您可以查詢MyUsers並在交易中插入MyUser,您無法查詢OtherThings並將MyUser插入交易。可能有點棘手的是,我不知道你是否可以在事務內部執行'get_or_insert()',因爲它本身就是一個事務。在這種情況下,您需要在插入MyUser之前查詢用戶名和電子郵件的可用性。 – 2010-04-08 22:09:47
我爲查詢放置的祖先過濾器是什麼?我的'User'對象都沒有共同的祖先。使所有的'用戶'對象具有共同的祖先並使它們在同一個實體組中是不好的。 – Kyle 2010-04-08 22:15:15