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



我有以下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();
}

目前需要对Datastore执行6写入操作才能持久化此Entity

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

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

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

正如您提到的,您的实体需要 6 个写入操作,划分如下:

  • 1 写入实体本身
  • 内置 EntitiesByKind 索引写入 1 次
  • 2 次写入 from 属性(1 次写入内置索引EntitiesByProperty,另一次写入内置索引 EntitiesByPropertyDesc (。
  • 2 次写入 to 属性(1 次写入内置索引EntitiesByProperty,另一次写入内置索引 EntitiesByPropertyDesc (。

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

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

最新更新