Java GWT&x2B;JDO+;GAE,如何安排我的数据以提高性能

Java GWT&x2B;JDO+;GAE,如何安排我的数据以提高性能,java,google-app-engine,gwt,jdo,Java,Google App Engine,Gwt,Jdo,这是我希望存储在数据库中的结构 祖父->父亲[]->孩子[]。祖父包含父亲的列表,父亲包含孩子的列表 最好的安排方式是什么?->embbeded还是他们自己的桌子 我将如何在客户端填充祖父[]。(我通过对象化、请求工厂甚至编组作为DTO进行了研究)。 目前我有2400个祖父,每个祖父有5个父亲,每个祖父有5个孩子 我的查询有些复杂,检索对象需要很长时间。 为了(祖父…) 质疑者 为了(父亲…) 牢骚满腹的孩子 对于每个查询,它都是pm.newQuery(grander.class);执行 这需要

这是我希望存储在数据库中的结构

祖父->父亲[]->孩子[]。祖父包含父亲的列表,父亲包含孩子的列表

最好的安排方式是什么?->embbeded还是他们自己的桌子

我将如何在客户端填充祖父[]。(我通过对象化、请求工厂甚至编组作为DTO进行了研究)。 目前我有2400个祖父,每个祖父有5个父亲,每个祖父有5个孩子

我的查询有些复杂,检索对象需要很长时间。 为了(祖父…) 质疑者 为了(父亲…) 牢骚满腹的孩子

对于每个查询,它都是pm.newQuery(grander.class);执行


这需要很长的时间,以分钟为单位

首先,如果您使用的是高复制数据存储,请不要使用JDO或JPA。 这是我经过艰苦努力学到的一课。这不是为它设计的

我没有使用JDO或JPA,而是使用了一个更简单、更干净、更高效的库Objectify

至于在HRD中存储数据,您必须告诉更多关于您的用例的信息。如果您有一个单一的祖先模型,那么您可以在HRD中保持它的层次结构。如果你的模型中也包含“母性”这一行,你就必须采取不同的做法

将其分级(如果可能)可能会给您带来两个好处: -能够在层次结构上进行事务处理。 -避免为父对象创建额外的索引,因为通过祖先获取不需要为父字段编制索引

还有两个缺点: -您只能有一个家长。所以你需要决定哪一个是最好的候选人。例如,如果你有母亲、外祖母的血统,你必须选择父亲或母亲,但不能同时选择两者作为父母。 -放置/获取具有较长层次键的对象时存在一些效率低下的问题。例如,必须始终提取父密钥。我建议你在文件里读一下,因为我可能是在误导你


重要的是要记住,你可能不需要好处,而缺点会严重影响你的项目。所以,你最初的问题的答案是:只有你能说出来。:)

是的,我最终使用了objectify,尽管在您建议之前:)。对于其他人,我已经有一段时间没有编写这个问题了,我部分更改了规范,但仍然像ATrubka建议的那样-请参阅文档。