我使用appengine和objectify作为我的应用程序的后端。当我在数据存储中查询时,我得到一个Entity对象,它具有所需行的数据。但是,使用物化我将如何查询实体并从中获得选定的文件?因为查询整个实体将会很繁重,并且需要更多的数据带宽。例如:在具有4列的实体中, - > Id,名称,描述,年龄。我应该询问oly Id,姓名,年龄。我不想要描述被查询。在实体中查询实体中的选定字段 - appengine
回答
如果您正在寻找投影查询,它们还没有在Objectify中实现。
https://groups.google.com/forum/#!topic/objectify-appengine/uvLIHhHMEM0
请描述更详细的答案,而不是链接到另一个讨论站点。或者,在问题上使用评论功能。 –
不知道为什么@jewirth低估了这一点,答案是现货。 – koma
我误解了答案。感谢您指出@koma。 –
的GAE数据存储不工作像一个RDBMS;你不能随意选择和选择从实体中查询哪些字段。数据存储查询的标准行为是遵循一个索引(将属性值映射到实体键),然后通过键来获取所有找到的实体。
有一种称为“投影查询”(Objectify支持的功能;查询命令对象上的project()
方法),但它不是像SQL中获得的通用SELECT语句。投影查询利用了索引本身包含索引值的事实,因此如果您只需要索引中的数据,则不需要执行整个实体的后续提取。但是,这带有一些限制:
- 您必须维护一个包含所有希望投影的数据的多属性索引。
- 您必须为多属性索引中的每个字段维护单一属性索引。
- 您只能在遵循该特定索引的查询上进行投影。
- 查询绕过Objectify的基于内存缓存的实体缓存。
请注意使用投影查询的成本。在您的示例中,您将需要Name和Age上的单一属性索引以及{__key__, Name, Age}
上的多属性索引。每个实体写入3个写入操作,而新的实体将花费8个写入操作。另一方面,投影查询的成本是一个常量1读操作。
其他另一方面,从memcache获取的批量成本为0,最坏的成本为1读操作。除非您的描述字段已知会导致您的问题,否则这是一个大规模的过早优化。
- 1. 查询更新appengine数据存储实体中的字段
- 2. appengine:如何通过密钥在具有祖先的实体中查询实体?
- 3. AppEngine实体的审计字段
- 4. JPQL 2.0 - 基于超类实体字段的查询实体
- 5. Doctrine2在实体中查询
- 6. Tweepy实体Appengine
- 7. 实体字段的选项
- 8. 实体框架字段查询很慢
- 9. 条件实体框架查询字段
- 10. Symfony Form选定的字段实体
- 11. 实体中的Id字段
- 12. 实体查询选择TOP1
- 13. Java 8实体字段中可选
- 14. 如何在实体中添加实体列表? (AppEngine Java)
- 15. AppEngine,实体丢失?
- 16. 在实体表单中的自定义查询中注入用户字段
- 17. 如何在UPDATE查询中将NULL设置为实体字段?
- 18. 实体框架查询包含实体集合的子实体
- 19. 实体框架,计算实体字段
- 20. 在实体框架中的查询
- 21. 在可选属性中搜索AppEngine中的实体
- 22. 实体框架按查询中的行字段降序排列
- 23. 查询一个特定的多值字段为主要实体
- 24. Hibernate命名查询(选择所有实体不出现在其他实体中)
- 25. 如何使用DotConnect for PostgreSQL查询实体框架实体的空字段值
- 26. .net实体查询
- 27. 从实体查询
- 28. 如何查询实体框架中的实体4
- 29. Symfony2实体字段
- 30. 访问Appengine NDB中删除的实体
这看起来像是http://stackoverflow.com/questions/11775317/objectify-query-a-attribute-from-an-entity的副本。另外,重型数据存储概念与rdbms不一样。了解有关数据存储查询成本的更多信息。 – kctang