GAE数据存储类型设计需要太多实体字段

时间:2014-08-12 07:05:19

标签: google-cloud-datastore objectify

我的一个数据存储实体正在增长,因为它可能是未来的性能瓶颈。

截至目前,我看到该实体由100个字段组成,如果我需要获取100个实体,每个实体有100个字段,肯定会受到性能影响(考虑从数据存储中获取数据时的基础数据序列化和反序列化) )。

因此,将整个实体转换为blob并使用键值存储它然后在逻辑上将数据解析回所需的对象格式是个好主意吗?

有什么有价值的建议吗?

2 个答案:

答案 0 :(得分:1)

除非你做了一些分析并发现序列化是一个真正的瓶颈,否则我不会担心你有多少个字段。 Java中的对象组装和反汇编很快。万一你实际上达到了限制(例如,成千上万个拥有数千个字段的实体),你可以编写一个自定义的Objectify翻译器来消除所有的反射开销。

这听起来像是过早优化。

答案 1 :(得分:0)

我不确定将实体转换为blob会大大提高性能,因为您仍需要在应用程序代码中将blob反序列化为实体。

如果您从不需要对象的所有字段,那么提高性能的一种方法是使用投影查询。 (见https://developers.google.com/appengine/docs/java/datastore/projectionqueries

投影查询基本上允许您仅返回所需的属性。这是有效的,因为它使用存储在索引中的信息,因此它永远不需要反序列化实体。这意味着您必须为您使用的任何投影查询定义索引。