Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据存储及;Memcache一致性-谷歌应用程序引擎&;客观化_Java_Google App Engine_Google Cloud Datastore_Objectify_Consistency - Fatal编程技术网

Java 数据存储及;Memcache一致性-谷歌应用程序引擎&;客观化

Java 数据存储及;Memcache一致性-谷歌应用程序引擎&;客观化,java,google-app-engine,google-cloud-datastore,objectify,consistency,Java,Google App Engine,Google Cloud Datastore,Objectify,Consistency,我在确保数据存储的一致性方面遇到了一个相当棘手的问题。 我们正在尝试每1分钟(cron)对BigQuery执行一次同步作业,并依赖数据存储来存储上一次同步完成的时间戳 当加载对象时,我们仍然可以看到最终的一致性,而我正在经历令人毛骨悚然的时刻 设置和父类都作为单例存储在数据存储中,即只存在一个 @Entity public class Settings { @Parent private Key<ParentClass> parent = ParentClass.g

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

当加载对象时,我们仍然可以看到最终的一致性,而我正在经历令人毛骨悚然的时刻

设置和父类都作为单例存储在数据存储中,即只存在一个

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

}
@实体
公共类设置{
@母公司
私钥parent=ParentClass.getKey();
@身份证
专用长id=123L;
...
公共设置保存(){
ofy().cache(false).consistency(ReadPolicy.consistency.STRONG).save().entity(this.now());
归还这个;
}
公共静态设置get(){
Settings Settings=ofy().cache(false).consistency(ReadPolicy.consistency.STRONG).load().key(key.create(ParentClass.getKey(),Settings.class,123L)).now();
如果(settings==null)settings=create();
返回设置;
}
私有静态设置创建(){
返回新设置().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>

目标过滤器
com.googlecode.objectify.ObjectifyFilter
目标过滤器
/*
异步缓存过滤器
com.googlecode.objectify.cache.AsyncCacheFilter
异步缓存过滤器
/*

问题是Objectify的内部会话缓存


最初是通过在第一次加载()之前使用ofy().clear()手动清除缓存来解决的,然后通过升级到Objectify 5.1.5来进一步改进。

我看到那篇文章,你会有类似的问题吗?介意发布你的web.xml吗?因为
get()
方法是按键获取的,所以它应该总是具有很强的一致性。@Patrice,我也看到了那篇文章,但是唉。。在帖子中添加了objectify过滤器..@tx802-我同意,这就是为什么我对这个问题感到完全困惑的原因。。在尽可能优化后,我甚至将Settings类重命名为Setting,但问题仍然存在,有时甚至会得到一个小时的对象,这是没有意义的。还值得注意的是,通过刷新memcache,这种情况仍然存在。会话缓存行为在此处有详细的说明:。常见问题解答中也提到了这一点:我认为文档中的要点是:
缓存实体的按键操作(单个或批处理)将返回实体实例,而无需调用数据存储甚至memcache。
。可能,您正在加载的实体已经在会话缓存中,因此objectify正在进行本地简单的hashmap查找,而不是memcache调用。