gpt4 book ai didi

java - 如何使用 objectify 确保 Appengine 实体上的并发请求的一致性?

转载 作者:行者123 更新时间:2023-12-01 12:30:10 25 4
gpt4 key购买 nike

在我的应用程序中,单个实体发生并发写入,我注意到当每秒写入次数超过 3 次时,并非所有请求都会保留。我正在从事务内部发出请求,但我也没有看到并发修改异常,我正在使用 Objectify,因此未抛出的异常可能是对象化的事情。我知道对于并发写入,我需要实现分片计数器,但即使在那里,我也想绝对确定如果写入被删除,我会收到通知。objectify 中是否有等效的 @version 或者是否有一种方法可以在我的 objectify 实现中使用 JPA/JDO 中的 @version 机制?这是保留我的实体的代码:

            while (true) {

try {
ofy().transact(new VoidWork() {
public void vrun() {
Venue_Model tnxVenue = ofy().load()
.type(Venue_Model.class).id(tnxVenueID)
.now();
tnxVenue.doStuff();

ofy().save().entities(tnxVenue).now();
}
});
//There are cases where this part of the code is reached but updates to the entity are not reflected in the data store viewer.
break;
} catch (ConcurrentModificationException e) {
// TODO Auto-generated catch block
if (retries == 0) {
e.printStackTrace();

+ person_ref.getKey() + e.toString());
break;
}
retries--;


} catch (Exception e) {

}
}
}

要检查实体是否已保留,我只需查看 appengine 仪表板上的数据存储查看器即可。

对于每个保留 field 的请求,我还尝试检索 n 检查该实体是否已被保留,并且奇怪的是在代码运行期间它返回正确 - 然而数据存储查看器讲述了一个不同的故事:/用于检查数据是否正确保存的代码。

               venue = ofy().load().type(Venue_Model.class).id(venue_id).now(); // search if person has checked in
if (!venue.allCheckins.contains(person_ref)) {
log.warning("attempt " + i + " for"
+ person_ref.getKey()); // Never entered :/
venue.doStuff(person_ref, subVenueName);
ofy().save().entities(venue).now();
}

最佳答案

您的代码实际上并不在事务中执行任何数据存储操作。阅读有关事务的 Objectify 文档:

https://code.google.com/p/objectify-appengine/wiki/Transactions

关于java - 如何使用 objectify 确保 Appengine 实体上的并发请求的一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25987176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com