Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 两个用户请求修改Google App Engine应用程序中的同一数据存储实体?_Google App Engine - Fatal编程技术网

Google app engine 两个用户请求修改Google App Engine应用程序中的同一数据存储实体?

Google app engine 两个用户请求修改Google App Engine应用程序中的同一数据存储实体?,google-app-engine,Google App Engine,这是一种好的做法吗?一个用户发出请求并从数据存储中获取实体,对其进行更改并保存。另一个用户同时对同一实体执行此操作。如果第一个用户的请求尚未完成,第二个用户会看到第一个用户的更改吗?如果我想让两个用户达成“协议”,我应该使用什么模式?第一个说“是”,第二个说“是”,交易就完成了。我必须使用客户端轮询来监视它吗?您将需要事务处理 阅读此处了解更多信息和实践: 事务按照第一个提交者获胜的逻辑发生! 但是重试是可能的 @db.transactional(retries=3) def make_agre

这是一种好的做法吗?一个用户发出请求并从数据存储中获取实体,对其进行更改并保存。另一个用户同时对同一实体执行此操作。如果第一个用户的请求尚未完成,第二个用户会看到第一个用户的更改吗?如果我想让两个用户达成“协议”,我应该使用什么模式?第一个说“是”,第二个说“是”,交易就完成了。我必须使用客户端轮询来监视它吗?

您将需要事务处理

阅读此处了解更多信息和实践:

事务按照第一个提交者获胜的逻辑发生! 但是重试是可能的

@db.transactional(retries=3)
def make_agreement_for_user_a(agreement):
    agreement = Agreement.get(agreement)
    if agreement.user_a:
        return "User A has already agreed"
    agreement.user_a = TRUE
    agreement.put()
    if agreement.user_b:
        return "Agreement complete"
    return "User A agreed"

@db.transactional(retries=3)
def make_agreement_for_user_b(agreement):
    agreement = Agreement.get(agreement)
    if agreement.user_b:
        return "User B has already agreed"
    agreement.user_b = TRUE
    agreement.put()
    if agreement.user_a:
        return "Agreement complete"
    return "User B agreed"
这只是一个例子,没有经过优化,也没有检查是否已经达成协议。
其余的由您决定

这是事务处理的地方。