Java 使用Objectify在GAE上并发写入数据

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

例如,假设我有以下objectify模型:

@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();