我已经构建了一个后端系统,以支持移动应用程序的7天免费试用功能。它由2个API组成
在我的用例中,强一致性非常重要。
我主要担心的是,以下代码是否能够实现强一致性?
作为
class User(ndb.Model):
email = ndb.StringProperty(required = True)
timestamp = ndb.DateTimeProperty(required = True)
class RegisterHandler(webapp2.RequestHandler):
def get(self):
result = {
'email' : email,
'user_timestamp' : 0,
}
email = self.request.get('email')
user_timestamp = int(time.time())
user = User.get_or_insert(email, email=email, timestamp=datetime.datetime.fromtimestamp(user_timestamp))
result['user_timestamp'] = int(time.mktime(user.timestamp.timetuple()))
self.response.headers['Content-Type'] = 'application/json'
json_result = json.encode(result)
self.response.out.write(json_result)
class QueryHandler(webapp2.RequestHandler):
def get(self):
result = {
'email' : email,
'user_timestamp' : 0,
}
email = self.request.get('email')
user = User.get_by_id(email)
if user is not None:
result['user_timestamp'] = int(time.mktime(user.timestamp.timetuple()))
self.response.headers['Content-Type'] = 'application/json'
json_result = json.encode(result)
self.response.out.write(json_result)
答案 0 :(得分:1)
是的,按键获取(即通过id)总是非常一致。最终的一致性只是查询的一个问题。
但是, get_or_insert
正在运行一项交易。