繁体   English   中英

数据存储和Memcache一致性-Google App Engine和Objectify

[英]Datastore & Memcache consistency - Google App Engine & Objectify

我在确保数据存储区的一致性方面遇到了一个非常棘手的问题。 我们正尝试每1分钟(cron)与BigQuery进行一次同步作业,并依靠数据存储区存储上一次同步完成时的时间戳。

当加载对象时,我们仍然看到最终的一致性,而我要花些时间了。

Settings和ParentClass类都作为单例存储在数据存储区中,即仅存在一个。

@Entity
public class Settings {

    @Parent
    private Key<ParentClass> parent = ParentClass.getKey();

    @Id
    private Long id = 123L;

    ...

    public Settings save(){
        ofy().cache(false).consistency(ReadPolicy.Consistency.STRONG).save().entity(this).now();
        return this;
    }

    public static Settings get(){
        Settings settings = ofy().cache(false).consistency(ReadPolicy.Consistency.STRONG).load().key(Key.create(ParentClass.getKey(), Settings.class, 123L)).now();
        if (settings == null) settings = create();
        return settings;
    }

    private static Settings create(){
        return new Settings().save();
    }

}

有谁知道是什么导致这种最终一致?

编辑:web.xml提取:

<filter>
    <filter-name>ObjectifyFilter</filter-name>
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ObjectifyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>asyncCacheFilter</filter-name>
    <filter-class>com.googlecode.objectify.cache.AsyncCacheFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>asyncCacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

问题是Objectify的内部会话缓存。

首先通过在第一个load()之前使用ofy()。clear()手动清除缓存来解决,然后通过升级到Objectify 5.1.5进行进一步改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM