Google App Engine - Dealing with concurrency issues of storing an object
Posted
by Spines
on Stack Overflow
See other posts from Stack Overflow
or by Spines
Published on 2010-04-08T20:58:38Z
Indexed on
2010/04/08
21:43 UTC
Read the original article
Hit count: 248
My User
object that I want to create and store in the datastore has an email
, and a username
. How do I make sure when creating my User
object that another User
object doesn't also have either the same email
or the same username
?
If I just do a query to see if any other users have already used the username or the email, then there could be a race condition.
UPDATE:
The solution I'm currently considering is to use the MemCache to implement a locking mechanism. I would acquire 2 locks before trying to store the User
object in the datastore. First a lock that locks based on email
, then another that locks based on username
.
Since creating new User
objects only happens at user registration time, and it's even rarer that two people try to use either the same username or the same email, I think it's okay to take the performance hit of locking.
I'm thinking of using the MemCache locking code that is here: http://appengine-cookbook.appspot.com/recipe/mutex-using-memcache-api/
What do you guys think?
© Stack Overflow or respective owner