【发布时间】:2016-02-04 13:16:31
【问题描述】:
我有两个任务(a、b)应该在事务中执行以避免不一致。我可能需要执行其中一项任务或同时执行两项任务。
在下面的代码中function_a 执行task a 和function_b 执行task b。
@ndb.transactional
def function_a():
# basic validations
# read entity of type A
# make changes to entity
# write entity
return
@ndb.transactional
def function_b():
# basic validations
# read entity of type B
# make changes to entity
# write entity
return
所以如果我需要一起执行任务 a 和 b。我可以执行如下操作:-
def function_ab():
function_a()
function_b()
return
但是这个实现不会同时保持A 和B 的一致性,所以我也需要让它成为事务性的。
@ndb.transactional
def function_ab():
function_a()
function_b()
return
因此,在这样的实现中,为了代码的可重用性,多次使用事务(一次在function_ab 上一次,一次用于个人funcion_a 和function_b)。如果我不追求代码可重用性,我可以执行以下操作:-
@ndb.transactional
def function_ab():
# basic validations
# read entity of type A
# make changes to entity
# write entity
# basic validations
# read entity of type B
# make changes to entity
# write entity
return
我不太了解事务在应用程序引擎中的工作方式,所以我的问题是,使用具有代码可重用性的事务是否有任何缺点(性能等),而不是我不追求代码可重用性并且采用代码可重用性方法真的有用吗?
【问题讨论】:
标签: google-app-engine transactions google-cloud-datastore app-engine-ndb