gpt4 book ai didi

google-app-engine - GAE 缓存对象化查询

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:31 25 4
gpt4 key购买 nike

我有一个简单的问题

在 objectify 文档中它说“只有 get()、put() 和 delete() 与缓存交互。不缓存 query()” http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Global_Cache .

我想知道的是 - 如果您有一个根实体(我没有使用@Parent,因为它似乎存在所有可扩展性问题),而所有其他实体都有一个 Key to,并且您执行这样的查询作为

ofy.query(ChildEntity.class).filter("rootEntity", rootEntity).list()

这是完全绕过了缓存吗?

如果是这种情况,是否有一种有效的缓存方式来根据条件进行查询 - 或者就此而言,您可以缓存与父级的查询,而您必须像下面这样进行实际的祖先查询

Key<Parent> rootKey = ObjectifyService.factory().getKey(root)
ofy.query(ChildEntity.class).ancestor(rootKey)

谢谢


对于下面的评论之一,我添加了修改

示例 dao(忽略验证方法 - 它只是做一些空值和数量检查):

这是从请求工厂 ServiceLocator 正在使用的 DAO 调用的委托(delegate)中查找所有方法的示例

public List<EquipmentCheckin> findAll(Subject subject, Objectify ofy, Event event) {
final Business business = (Business) subject.getSession().getAttribute(BUSINESS_ATTRIBUTE);
final List<EquipmentCheckin> checkins = ofy.query(EquipmentCheckin.class).filter(BUSINESS_ATTRIBUTE, business)
.filter(EVENT_CONDITION, event).list();
return validate(ofy, checkins);
}

现在,当执行此操作时,我发现在我的 AbstractDAO 中实际上正在调用以下方法。

/**
*
* @param id
* @return
*/
public T find(Long id) {
System.out.println("finding " + clazz.getSimpleName() + " id = " + id);
return ObjectifyService.begin().find(clazz, id);
}

最佳答案

是的,所有查询都绕过 Objectify 的集成内存缓存并直接从数据存储中获取结果。数据存储提供了(越来越复杂的)查询引擎,可以理解如何返回结果;从客户端确定查询结果的缓存失效几乎是不可能的。

另一方面,Objectify4 确实提供了混合查询缓存,其中查询会自动转换为仅键查询,然后进行批量获取。仅键查询仍然需要数据存储,但任何实体实例都是从内存缓存中提取的(并在未命中时填充)。它可能会为您省钱。

关于google-app-engine - GAE 缓存对象化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com