实体组,JPA和每秒写入限制(应用程序引擎)

时间:2013-04-04 14:46:20

标签: java google-app-engine jpa

我有两个实体parentchild,其中有一个OneToMany relationship。父类具有子类的@Owned注释。没有任何关系。 (从孩子到父母)

@Entity
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Owned
    @OneToMany(fetch = FetchType.LAZY)
    private Set<Child> children;

    .........

}


@Entity
public class Child {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key id;

    public String value;

    .........

    public int hashCode() {
         ... based on this.value ...
    }

    public boolean equals(Object o) {
         ... based on this.value ...
   }

}

问题1:此设置是否类似于Parent是祖先的实体组?以下两个语句确实返回一个相等的键:

- child.getId().qv.getId().getParent()
- KeyFactory.createKey("Parent", parent.getId())

问题2:以下代码是否需要大约十秒才能执行?它运行大约223毫秒:

for(int i = 0; i < 10; i++) {
    em.getTransaction().begin();

    parent = em.find(Parent.class, parentId);

    child = new Child("value" + i);
    parent.addChild(child)

    em.merge(parent)

    em.getTransaction().commit();
}

我认为应该花费10秒的原因是因为Google App Engine文档中的这句话:

  

“但是,您可以写入同一实体组的速率限制为每秒写入实体组1次。”

https://developers.google.com/appengine/docs/java/gettingstarted/usingdatastore

中的

由于

2 个答案:

答案 0 :(得分:2)

您是在本地开发服务器或生产中运行吗? 本地开发服务器不能完全模仿生产的性能特征。

该限制作为指导原则。你可能会获得比爆发更好的性能。但是,如果您尝试了相当长时间的高写操作,您将获得例外。

数据存储区写入的性能限制不会减慢代码执行速度。当事务写入失败时,它们将抛出异常。确保你有一些异常处理程序来检查是否会发生这种情况。

答案 1 :(得分:0)

Q1:父母确实看起来像是祖先。

Q2:为什么需要10秒钟?我认为没有什么可以暗示这必须是这种情况。所以我对此的回答是否定的。