Google app engine google应用程序引擎数据存储上的嵌套事务
如果我想要全部删除,则执行全部或无Google app engine google应用程序引擎数据存储上的嵌套事务,google-app-engine,transactions,google-cloud-datastore,objectify,Google App Engine,Transactions,Google Cloud Datastore,Objectify,如果我想要全部删除,则执行全部或无 如果没有任何改变。删除组是原子的吗 如果我删除外部事务,会有什么变化吗 若我只删除内部事务,那个么组将是原子的吗 Ig I是否将周期替换为批量删除并仅保留外部事务 //内部活动计划 公共作废删除(事件计划事件计划){ y的最终Objectify=Objectify.beginTransaction(); 试一试{ 最终ActivityDAO ActivityDAO=新ActivityDAO(); 对于(最终活动:eventPlan.getActivities(
如果您使用Objectify 3.1,则所有事务都是,最多可以在5个不同的实体组上操作,即如果您的活动没有公共父项(=将它们放在同一实体组中),则一个事务中最多只能删除5个
如果我使用纯数据存储事务,我猜这些规则大致适用——假设我没有使用objectify。因此,嵌套事务实际上重写了实体组上的一些标记,覆盖并取消了任何外部事务?因此,让内部事务(都在循环中发生)并排执行另一个put操作,即put操作(包含在循环中)根本不属于任何事务的一部分?(b/c外部事务被忽略了?)或者外部事务仍然适用吗?每次调用
beginTransaction()
(在objectify或其他地方,它们都是低级API的包装器)您将获得一个新事务。因此,任何内部事务都会在实体组上启动一个新事务,并使所有外部事务无操作。因此,在GAE中嵌套事务是没有意义的,除非您认为外部事务只是浪费代码(对于特定的执行场景)。对吗?:-在GAE上没有“在实体组上启动交易",没有锁定等。GAE事务模型依赖于内部版本号,例如-当事务提交时,它会检查版本是否更改并引发异常。从文档中可以看出:App Engine通过检查事务中使用的实体组的上次更新时间来使用乐观并发控制。在提交entity groups,App Engine再次检查事务中使用的实体组的上次更新时间。如果自初始检查以来已更改,App Engine将引发异常。有关实体组的说明,请参阅数据存储概述页面。请参阅
// inside event plan dao
public void delete(EventPlan eventPlan) {
final Objectify ofy = Objectify.beginTransaction();
try {
final ActivityDAO activityDao = new ActivityDAO();
for (final Activity activity : eventPlan.getActivities()) {
activityDao.delete(activity);
}
ofy.getTxn().commit();
} finally {
if (ofy.getTxn().isActive()) {
ofy.getTxn().rollback();
|
}
}
// inside activity dao
public void delete(Activity activity) {
final Objectify ofy = Objectify.beginTransaction();
try {
// do some logic in here, delete activity and commit txn
} finally {
// check and rollback as normal
}
}