如何减少简单实体的写操作次数?

时间:2013-12-14 06:31:19

标签: google-app-engine jpa google-cloud-datastore jpa-2.0

我有以下Entity

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DCOL", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("Alias")
public class Alias
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;
    @Basic
    private UUID from;
    @Basic
    private UUID to;
    @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
    private Date createdOn;

    public Alias() { /* intentionally blank */ }

    public Alias(@Nonnull final UUID from, @Nonnull final UUID to)
    {
        this.key = KeyFactory.createKey(Alias.class.getSimpleName(), from.toString());
        this.from = from;
        this.to = to;
        this.createdOn = new Date();
    }
}

以下是持续存在的代码:

final EntityManager em = EMF.TRANSACTIONS_OPTIONAL.createEntityManager();
try
{
    final Alias a = new Alias(from, to);
    em.persist(a);
}
finally
{
    em.close();
}

目前,6需要Datastore个写操作才能保留此Entity

我通过使用10标记6将数字从createdOn减少到@Extension,以将其从自动索引中排除。这是写操作的40%减少!

有什么方法可以减少这么简单的写入次数吗?

使用低级Datastore API会直接进行任何改进吗?

1 个答案:

答案 0 :(得分:1)

正如您所提到的,您的实体需要按以下方式划分6次写入操作:

  • 1为实体本身写作
  • 1代表内置EntitiesByKind索引
  • from属性写入2(内置索引EntitiesByProperty为1,内置索引EntitiesByPropertyDesc为另一个)。
  • to属性写入2(内置索引EntitiesByProperty为1,内置索引EntitiesByPropertyDesc为另一个)。

此时您唯一有机会减少写入次数,将fromto属性中的任何一个标记为未编入索引(从而将每个属性的写入次数减少2) )。

您可以在此处查看更多信息:https://developers.google.com/appengine/docs/java/datastore/entities#Java_Understanding_write_costs