Java 立即加载列表的所有条目<;参考<;T>&燃气轮机;

Java 立即加载列表的所有条目<;参考<;T>&燃气轮机;,java,objectify,google-cloud-datastore,Java,Objectify,Google Cloud Datastore,我目前使用此模式来存储也是对象化实体的类型列表: @Entity class Test{ private List<Ref<T>> data = new ArrayList<>(); public List<T> getTees(){ List<T> tmp = new ArrayList<>(this.data.size()); // Is the entire list loaded h

我目前使用此模式来存储也是对象化实体的类型列表:

@Entity
class Test{
    private List<Ref<T>> data = new ArrayList<>();

    public List<T> getTees(){
        List<T> tmp = new ArrayList<>(this.data.size()); // Is the entire list loaded here?
        for (Ref<T> d : this.data) {
            tmp.add(d.get()); // or every single entry here??
        }
        return tmp;
    }
}
@实体
课堂测试{
私有列表数据=新的ArrayList();
公共列表gettes(){
List tmp=new ArrayList(this.data.size());//是否在此处加载了整个列表?
用于(参考d:此数据){
tmp.add(d.get());//或者这里的每个条目??
}
返回tmp;
}
}
问题是:第一次使用
data
-字段时,是从数据存储器加载整个列表(
Ref
“指向”的数据),还是
Ref.get()
-方法分别加载每个条目

如果是这样,大容量如何一次加载整个列表


注意:我并不总是需要列表,这就是为什么它没有
@Load
-注释。

Objectify不会加载任何引用,除非您
.get()
显式地加载它,这会导致单独获取,或者您告诉它通过
@Load
自动加载所有内容。这加快了总体加载速度,因为它可以批量处理请求,而不是形成几个单独的请求

如果“我并不总是需要列表”,你的意思是“需要”和“不需要”有不同的情况,那么看看负载组,本质上是一种打开或关闭
@load
注释的方法

有你这样的例子吗 打开/关闭自动加载的步骤


顺便说一句,可以使用

公共列表getTees(){
集合值=ofy().load().refs(数据).values();
返回新的ArrayList(值);
}

调用
refs()
还会将所有备份数据加载到
列表中吗?这意味着当我从该列表中对任何
Ref
调用
get(),每一个随之产生的负载都应该来自于系统。
Map
方法允许您异步请求一组实体,访问Map中的某个值是在它阻塞时,直到加载该特定值为止。调用
Map#values()
需要加载所有。从现在起,无论您如何获取它们,它们都应该可用。快速跟进:链接的文档讨论了
@Cache
-注释。据我所知,在经常阅读的所有内容上添加注释将提高性能,并且不会带来任何损失。我知道Memcache的总大小没有限制(只是存储对象的大小),所以我可以在所有东西上都添加注释,还是缺少什么东西(除了不会提高写入速度之外)?@Lukaskknuth正确,将它放在所有地方通常比根本不使用它要好,因为事情可能会变得更快,更重要的是,可以为您节省成本为$$的数据存储获取。但是,当每次访问都修改实体时,缓存它们是没有意义的。Memcache(未支付的)没有限制,但也没有保证,例如,缓存随时可能被清空,或者您的份额可能会变得非常小。因此,您应该监控memcache对您的行为,可能只缓存最重要的实体,以防止不太重要的实体将重要的实体赶走
public List<T> getTees(){
    Collection<T> values = ofy().load().refs(data).values();
    return new ArrayList<T>(values);
}