【发布时间】:2010-04-08 20:58:38
【问题描述】:
我想要创建并存储在数据存储中的User 对象有一个email 和一个username。在创建我的User 对象时,如何确保另一个User 对象不具有相同的email 或相同的username?
如果我只是查询是否有其他用户已经使用过用户名或电子邮件,那么可能存在竞争条件。
更新:
我目前正在考虑的解决方案是使用 MemCache 来实现锁定机制。在尝试将 User 对象存储在数据存储中之前,我会获得 2 个锁。首先是一个基于email 锁定的锁,然后是另一个基于username 锁定的锁。
由于创建新的User 对象只发生在用户注册时,而且很少有人尝试使用相同的用户名或相同的电子邮件,因此我认为可以接受锁定的性能损失。
我正在考虑使用这里的 MemCache 锁定代码:http://appengine-cookbook.appspot.com/recipe/mutex-using-memcache-api/
你们觉得呢?
【问题讨论】:
标签: google-app-engine concurrency google-cloud-datastore