我有以下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会直接进行任何改进吗?
答案 0 :(得分:1)
正如您所提到的,您的实体需要按以下方式划分6次写入操作:
EntitiesByKind
索引from
属性写入2(内置索引EntitiesByProperty
为1,内置索引EntitiesByPropertyDesc
为另一个)。to
属性写入2(内置索引EntitiesByProperty
为1,内置索引EntitiesByPropertyDesc
为另一个)。此时您唯一有机会减少写入次数,将from
或to
属性中的任何一个标记为未编入索引(从而将每个属性的写入次数减少2) )。
您可以在此处查看更多信息:https://developers.google.com/appengine/docs/java/datastore/entities#Java_Understanding_write_costs