【问题标题】:GWT + JDO + GAE, how to arrange my data for performanceGWT + JDO + GAE,如何为性能安排我的数据
【发布时间】:2011-06-26 15:19:36
【问题描述】:

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

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

最好的安排方式是什么 -> 嵌入或他们自己的表格?

我将如何在客户端填充 Grandfather[]。 (我已经将对象化、requestFactory 甚至编组为 DTO)。 目前我有2400个祖父,每个有5个父亲,每个有5个孩子。

我的查询有点,这需要很长时间才能检索对象。 对于(祖父...) 查询Allfather 为(父亲……) 查询所有儿童

对于每个查询,它都是 pm.newQuery(GrandFather.class); pm.execute。

这需要几分钟的时间。

【问题讨论】:

    标签: java google-app-engine gwt jdo


    【解决方案1】:

    首先,如果您使用的是高复制数据存储,请不要使用 JDO 或 JPA。 这是我从艰难中吸取的教训。它不是为它设计的。

    我没有使用 JDO 或 JPA,而是使用了一个更简单、更清洁、更高效的库,称为 Objectify。

    至于将数据存储在 HRD 中,您必须详细说明您的用例。如果你有一个单一的祖先模型,那么你可以在 HRD 中保持它的层次结构。如果您的模型还包含“母系”行,则必须以不同的方式进行。

    分层(如果可能)可能会给您带来 2 个好处: - 能够在层次结构上进行交易。 - 避免父对象的额外索引,因为通过祖先获取不需要索引父字段。

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

    请务必记住,您可能不需要好处,而坏处可能会严重影响您的项目。所以你原来的问题的答案是:只有你能说出来。 :)

    【讨论】:

    • 是的,我最终使用了 objectify,但在您提出建议之前:)。
    • 对于其他人来说,我已经有一段时间没有编写这个问题了,我部分更改了规格,但仍然像 ATrubka 建议的那样 - 请参阅文档。
    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多