【发布时间】:2012-07-05 11:10:49
【问题描述】:
我创建了一个测试 Web 应用程序来测试 Entities 的持久读取删除,我创建了一个简单的循环来持久保存 Entity,检索并修改它,然后将其删除 100 次。
在循环的某个间隔没有问题,但是有一个错误,Entity 已经存在因此无法持久化(我添加的自定义异常处理) .
同样在循环的某个时间间隔,Entity 不存在,因此无法修改,最后在某个时间间隔,Entity 不存在,无法删除。
我知道循环可能非常快,以至于对 Appengine 数据存储的操作尚未完成。因此,当尝试访问它或删除操作尚未完成时,会导致类似Entity does not exist 的错误,因此无法创建具有相同ID 的实体,依此类推。
但是,我想了解如何处理这种使用 Entity 进行并发操作的情况。
【问题讨论】:
-
这需要更多解释......如果没有您正在做的事情的上下文,这些错误没有任何意义。但是,如果我不得不猜测,听起来您正在执行异步操作而不是完成它们。
-
@stickfigure 考虑两个线程尝试更新实体的示例,如果这两个线程几乎同时访问实体,则更新实体,比如增加一个值,然后理论上会有在两个线程中的任何一个的保存操作之后是一个缺失的增量
-
这正是交易被发明的原因:-)
-
@stickfigure 是的,我刚从 Objectify 代码网站上看到它,我实际上实现了 DAOT 类,现在可以使用,我相信 DAOT 模式也经过了很好的测试
-
@stickfigure 然而,在阅读了 wiki 和代码之后,似乎它建立在 ConcurrentModificationException 之上以确保它不会同时持续存在,但是,在读取计数器值时,是否有应用程序尝试同时读取密钥时出现异常?
标签: google-app-engine concurrency objectify