Java 使用Objectify在GAE上并发写入数据
例如,假设我有以下objectify模型:Java 使用Objectify在GAE上并发写入数据,java,google-app-engine,google-cloud-datastore,objectify,Java,Google App Engine,Google Cloud Datastore,Objectify,例如,假设我有以下objectify模型: @Cache @Entity public class CompanyViews implements Serializable, Persistence { @Id private Long id; private Date created; private Date modified; private Long companyId; ........ private Integer co
@Cache
@Entity
public class CompanyViews implements Serializable, Persistence {
@Id
private Long id;
private Date created;
private Date modified;
private Long companyId;
........
private Integer counter;
........
@Override
public void persist() {
persist(false);
}
@Override
public void persist(Boolean async) {
ObjectifyService.register(Feedback.class);
// setup some variables
setUuid(UUID.randomUUID().toString().toUpperCase());
setModified(new Date());
if (getCreated() == null) {
setCreated(new Date());
}
// do the persist
if (async) {
ofy().save().entity(this);
} else {
ofy().save().entity(this).now();
}
}
}
我想使用计数器字段来跟踪视图的数量,或者打开的数量,或者基本上使用整数字段进行计数
现在发生的是,对于一个GAE实例,将调用以下内容:
A:
另一个例子是:
B:
如果它们同时读取计数器,或者在另一个实例持久化计数器之前读取计数器,则它们将相互覆盖
在MySQL/Postgres中,您获得了行级锁定,如何在GAE上为Objectify实体执行“行级锁定”?您需要在并发更新实体时使用
请注意,由于您更新同一实体,因此您将有大约1次写入/秒的限制。要解决此问题,请查看。在同时更新实体时需要使用
请注意,由于您更新同一实体,因此您将有大约1次写入/秒的限制。要解决这个问题,请查看。谢谢Peter,我想最好是每天插入新条目并计算一次统计数据,然后将其放入事务中。谢谢Peter,我想最好是每天插入新条目并计算一次统计数据,然后将其放入事务中。
CompanyViews views = CompanyViews.findByCompanyId(...);
views.setCounter(views.getCounter() + 1);
views.persist();
CompanyViews views = CompanyViews.findByCompanyId(...);
views.setCounter(views.getCounter() + 1);
views.persist();