簡體   English   中英

使用Objectify在GAE上同時寫入數據

[英]Using Objectify to concurrently write data on GAE

例如,假設我有以下對象化模型:

@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:

CompanyViews views = CompanyViews.findByCompanyId(...);
views.setCounter(views.getCounter() + 1);
views.persist();

對於另一個實例:

B:

CompanyViews views = CompanyViews.findByCompanyId(...);
views.setCounter(views.getCounter() + 1);
views.persist();

如果它們都同時讀取計數器或在另一個實例將其持久化之前讀取計數器,則它們將相互覆蓋。

在MySQL / Postgres中,您獲得行級鎖定,如何對GAE上的Objectify實體進行“行級鎖定”?

同時更新實體時,您需要使用事務

請注意,由於您更新同一實體,因此限制約為1個寫入/秒。 要解決此問題,請查看分片計數器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM